我们看到的Akka.net演员大约每个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);
}
Run Code Online (Sandbox Code Playgroud)
招待员
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
迎接
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
对于Akka jvm,大小约为400字节/ actor,对于Erlang,大小约为300字节/进程.
在Akka.net上的CLR上播放100,000个演员似乎每个大约2900个字节.
这大概是正确的吗?
提前致谢!
Akka.NET的重量可能比目前阶段所需要的重得多.
例如:
ActorPath当前的每个元素都有其前缀元素的完整副本.所以至少有一些冗余字节,因为字符串和列表就在那里.(我们有一个重构这个的任务)
ActorCell 它的相关类都使用并发字典来存储子actorrefs,这将是低效的memmory明智的,我们正在努力移植scala childcontainer特征.
因此,当我们接近1.0版本时,预计内存消耗会下降.
你使用了什么样的探查器?例如,如果您正在使用Windows任务管理器,那么您可以保证看到不正确的数字,这是对.NET内存的积极预分配.
另外,看看新的ReceiveActor http://akkadotnet.github.io/wiki/ReceiveActor
这不使用message.Match().With(...)表示法,因此,由于没有为每个收到的消息分配任何模式匹配对象,因此在GC上会更轻.
Actor 大小现在为400 字节,与 Erlang 的 300-400 字节相当。
引用自www.getakka.net:
单台机器上的高性能 5000 万条消息/秒。内存占用小;每 GB 堆约 250 万个 Actor。
| 归档时间: |
|
| 查看次数: |
1884 次 |
| 最近记录: |