【问题标题】:Stateless or stateful C# actors无状态或有状态 C# 角色
【发布时间】:2012-07-04 16:33:18
【问题描述】:

我正在设计一个项目,它将同时激活和控制许多异步参与者。

我想问一下,我应该使用哪种方法来获得更高的稳定性和可扩展性?

无状态还是有状态?

就我所看到的差异而言,它看起来像:

一个。有状态的

Actor _act = new Actor (long key);

_act.DoSomething (object _what);

b.无状态

Actor _act = new Actor (long key);

_act = _act.DoSomething(object _what);

据我所知,第二种方法很昂贵 - 内存预留等。但是这种第二种方法可以让您不必担心状态和锁。

dotnet 的首选方式是什么?要达到的参与者目标数量约为 100k,一个节点每秒执行 2.5-3 mils 操作。

PS 每个参与者都有自己的有限状态机来计算。

对于有状态的,它由周期性异步委托调用

对于无状态,它在考虑时间维度的情况下调用每个操作。

【问题讨论】:

  • 我投票关闭它,因为它会更好地匹配另一个 stackexchange 网站并引发讨论(可能是个人偏好),尽管我认为这是一个有趣的话题。
  • 我同意@Sascha,这是主观的。我个人喜欢第二种方法,但我更喜欢函数式方法并且能够链接语句。 _act.DoX().DoAlsoY();
  • 恐怕我错过了社区的目标,我经历了一些缺乏实践,所以我想知道意见。所以如果过于主观,就关闭吧。
  • 你为你的演员使用什么框架?还是你自己写的?

标签: c# asynchronous stateless


【解决方案1】:

Actor 编程模型基于这样一个理念,即每个 Actor 应该是一个具有自包含“状态”的独特且独立的计算实体。根据代码 sn-p 很难判断您提供的实际好处是通过使用一种技术而不是另一种技术,但在我看来,至少您通过不封装它们而在某种程度上挫败了 Actors 的想法以您可以利用诸如无锁代码之类的方式声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 2015-06-26
    • 2011-07-16
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多