【问题标题】:Akka.net actor sizeAkka.net 演员大小
【发布时间】:2014-09-30 22:32:03
【问题描述】:

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

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

程序 sn-p

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 字节。

这大致正确吗?

提前致谢!

【问题讨论】:

    标签: c# akka actor akka.net


    【解决方案1】:

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

    例如:

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

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

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

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

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

    【讨论】:

    • 任务管理器是的。也在 Mono 上运行并且(来自任务管理器)它有点高,抱歉没有数字。等不及 v1.0 了! :)
    • 跟进这一点,我们现在每个 actor 大约 1100 字节
    【解决方案2】:

    Actor 大小现在为 400 字节,即comparable to Erlang which is 300-400 bytes

    引用www.getakka.net:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-10
      • 2015-02-22
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2020-01-03
      • 2017-02-15
      • 1970-01-01
      相关资源
      最近更新 更多