我正在设计一个将同时激活和控制许多异步参与者的项目。
我想问一下,我应该使用哪种方法来提高稳定性和可扩展性?
无状态还是有状态?
据我所知,它看起来像:
一个。有状态
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 mils。
PS 每个参与者都有自己的有限状态机来计算。
对于有状态,它由周期性的异步委托(delegate)调用
对于无状态,它在考虑时间维度的情况下调用每个操作。
最佳答案
Actor 编程模型基于这样一种理念,即每个 Actor 都应该是一个具有自包含“状态”的独特且独立的计算实体。很难根据代码片段判断您通过使用一种技术而不是另一种技术提供了您可能实际获得的好处,但在我看来,至少您通过不将 Actors 的状态封装在其中而在某种程度上破坏了 Actors 的想法这样您就可以利用诸如无锁代码之类的东西。
关于c# - 无状态或有状态的 C# actors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11324547/