我正在设计一个项目,它将同时激活和控制许多异步演员。
我想问一下,我应该采用哪种方法来提高稳定性和可扩展性?
无国籍或有状态?
就我所看到的不同而言,它看起来像:
一个。有状态
Actor _act = new Actor (long key);
_act.DoSomething (object _what);
湾无国籍
Actor _act = new Actor (long key);
_act = _act.DoSomething(object _what);
据我所知,第二种方式是昂贵的 - 内存预留等。但是这一,第二种方法允许不关心状态和锁定。
dotnet更适合哪种方式?要达到的角色的目标数量大约是100k,一个节点每秒2.5-3密耳的操作。
PS每个演员都有自己的有限状态机来计算。
对于有状态的,由周期性异步委托调用
对于无状态,考虑到时间维度,它会调用每个操作。
答案 0 :(得分:1)
演员编程模型基于这样的想法:每个Actor应该是具有自包含“状态”的唯一且独立的计算实体。根据代码片段很难说你提供了实际可能获得的好处是通过使用一种技术而不是另一种技术,但在我看来,至少你在某种程度上打败了Actors的想法而没有封装他们的状态。这样一种方式,你可以利用锁定免费代码之类的东西。