c# - 无状态或有状态的 C# actors

标签 c# asynchronous stateless

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

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

无状态还是有状态?

据我所知,它看起来像:

一个。有状态

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/

相关文章:

c# - 如何在 C# 中动态转换泛型列表?

用于流式传输请求正文内容的 Python 服务器

javascript - 带有 IE(用于延迟加载)问题的脚本 onload/onerror

java - 如果 Wicket 链接到 CSS 样式表,为什么它会使页面有状态?

c# - 如何将图像单元添加到 Xamarin Forms ListView 中的多个项目

c# - 单点触控 : uncaughtExceptionHandler?

apache - 为什么 Apache 事件 MPM 表现不佳?

http - 无状态Web应用程序,城市传奇?

reactjs - 用于切换 bool 值的无状态组件

c# - Culture 是否自动应用于 ASP.Net Webforms? (不是 UICulture)