gpt4 book ai didi

c# - AKKA.NET 问题 : Is it a good idea to have more than one ActorSystem in an application?

转载 作者:行者123 更新时间:2023-11-30 13:53:32 24 4
gpt4 key购买 nike

我正在为 C# 桌面应用程序(不是服务器,而是桌面 GUI 应用程序)编写插件。为了使我们的线程问题更简单,我正在研究是否可以在这些插件中使用 AKKA.NET。这些插件基本上彼此独立。因此,从架构 POV 来看,很自然地为每个插件提供它自己的“私有(private)”ActorSystem 实例。这种方法的优点是插件最大程度地相互隔离。另一方面,我阅读了一些关于 JVM 的 Akka 的文章,这些文章告诉我在应用程序中有太多的 ActorSystem 实例是一种反模式,因为 ActorSystem 非常重量级。

并发插件的实际数量是 10-20,即应用程序最多可以在其中运行 20 个 ActorSystem 实例。同样,这是一个 GUI 桌面应用程序,通常在终端服务器 session 中运行(即可能有许多此类 GUI 应用程序在终端服务器上运行)。

那么 - 这种简单的方法(每个库一个 ActorSystem)是否可行?还是设计一种使用全局 ActorSystem 的方法更好,它使用每个插件的顶级 actor 来隔离插件。这种方法在性能方面可能更好,但我有点担心它,因为插件之间并不那么孤立。

那么 - 这种“多系统”方法是一种好的架构方法,还是坚持“一个全局系统”设计更好?您在这里有什么经验?

最佳答案

So - is this simplicistic approach (one ActorSystem per library) tenable? Or is it better to devise an approach using a global ActorSystem, which uses per-plugin top-level actors to isolate the plugins. This approach is probably better for performance, but I am a bit concerned about it because the plugins are not as isolated from each other.

这是我要采用的方法 - 让每个插件使用相同的 ActorSystem 创建自己的 actors 层次结构。每个插件都可以有自己的参与者和消息类型,没有重叠。如果您最终运行多个 ActorSystem,您最终还是会有多个 actor 使用相同的线程,因为默认情况下 ActorSystem 将 actor 调度到同一个 .NET 线程上TPL 和桌面应用程序的其他部分可能使用的池。让一个 ActorSystem 管理所有这些可能是最简单的,因为这样您就有一个调度程序在同一组线程上编码执行(竞争较少。)

关于c# - AKKA.NET 问题 : Is it a good idea to have more than one ActorSystem in an application?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com