4

我们看到 Akka.net actor 每个大约 2900 字节。(Akka.net v0.6.1.0)

这是 Akka.net 中每个演员的大致尺寸吗?

程序片段

ActorSystem actor_system = ActorSystem.Create("myActor");//create an actor

     var greeter = actor_system.ActorOf<GreetingActor>("greeter");
     InternalActorRef[] greeterArray = new InternalActorRef[100000];

      for (int i = 0; i < greeterArray.Length; i++)
        {
          greeterArray[i] = actor_system.ActorOf<GreetingActor>("greeter" + i);
          Console.WriteLine("Creating Actor number " + i);
        }

招待员

using Akka;
using Akka.Remote;
using Akka.slf4net;
using Akka.Actor;

namespace Akka_NET_test
{
    //Create the actor class
    public class GreetingActor : UntypedActor
    {       

        protected override void OnReceive(object message)
        {

         message
           .Match()
         //this can be done with "if (message is Greet)" if you prefer
           .With<Greet>(m => Console.WriteLine("Hello {0} from GreetingActor " +  this.Self.ToString(), m.myMsg));
        }
    }
}

迎接

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Akka;
using Akka.Remote;
using Akka.slf4net;

namespace Akka_NET_test
{
    //Create a message type that your actor will respond to
    public class Greet
    {
        public string myMsg { get; set; }
    }
}

据报告,Akka jvm 的大小约为 400 字节/actor,Erlang 的大小约为 300 字节/进程。

在 Akka.net 中的 CLR 上旋转 100,000 个演员似乎每个大约 2900 字节。

这大致正确吗?

提前致谢!

4

2 回答 2

9

Akka.NET 的重量可能比当前阶段需要的要重一些。

例如:

  • 当前的每个元素ActorPath都有其前缀元素的完整副本。所以至少有一些冗余字节作为字符串和列表在那里进行。(我们的任务是重构它)

  • ActorCell它的相关类都使用并发字典来存储子actorrefs,这将是低效的内存,我们正在努力移植scala childcontainer trait。

因此,随着我们接近 1.0 版本,预计内存消耗会下降。

你用的是什么分析器?例如,如果您使用的是 Windows 任务管理器,由于 .NET 对内存的积极预分配,您肯定会看到不正确的数字。

另外,看看新的ReceiveActor http://akkadotnet.github.io/wiki/ReceiveActor 这不使用message.Match().With(...)符号,因此,由于没有为每个接收到的消息分配任何模式匹配对象,因此在 GC 上会更轻.

于 2014-08-07T16:20:19.010 回答
5

Actor 大小现在是400 字节与 Erlang 的 300-400 字节相当

引自www.getakka.net

单台机器上的高性能 5000 万条消息/秒。内存占用小;每 GB 堆约 250 万演员。

于 2015-07-15T16:27:54.537 回答