gpt4 book ai didi

scala - 我是否需要重复使用相同的 Akka ActorSystem,还是可以在每次需要时创建一个?

转载 作者:行者123 更新时间:2023-12-03 05:39:42 26 4
gpt4 key购买 nike

Akka 2.x 需要许多命令来引用 ActorSystem。因此,要创建 Actor MyActor 的实例,您可能会说:

val system = ActorSystem()
val myActor = system.actorOf(Props[MyActor])

由于经常需要 ActorSystem:许多代码示例省略了代码中的创建,并假设读者知道 system 变量来自何处。

如果您的代码在不同位置生成 Actor,您可以复制此代码,可能会创建额外的 ActorSystem 实例,或者您可以尝试通过引用来共享相同的 ActorSystem 实例到某个全局变量或通过传递 ActorSystem 来实现。

Akka 文档提供了 general overview of systems of actors在“Actor Systems”标题下,有 documentation of the ActorSystem class 。但这些都不足以解释为什么 Akka 用户不能仅仅依靠 Akka 来管理这个底层。

问题

  • 共享同一个 ActorSystem 对象或每次创建一个新对象会产生什么影响?

  • 这里的最佳实践是什么?一直传递 ActorSystem 似乎非常严厉。

  • 一些示例为 ActorSystem 指定了一个名称:ActorSystem("MySystem"),其他示例则仅调用 ActorSystem()。这有什么区别?如果两次使用相同的名称会怎样?

  • akka-testkit 是否要求您与传递给 TestKit 构造函数的系统共享一个通用的 ActorSystem

最佳答案

创建 ActorSystem 的成本非常高,因此您希望避免每次需要时都创建一个新的。此外,您的 Actor 应该在同一个 ActorSystem 中运行,除非有充分的理由不这样做。 ActorSystem 的名称也是在其中运行的 actor 的路径的一部分。例如。如果您在名为 MySystem 的系统中创建一个 actor,它将具有类似 akka://MySystem/user/$a 的路径。如果您处于 Actor 上下文中,则始终拥有对 ActorSystem 的引用。在 Actor 中,您可以调用 context.system。我不知道 akka-testkit 期望什么,但你可以看看 akka 测试。

总而言之,您应该始终使用相同的系统,除非有充分的理由不这样做。

关于scala - 我是否需要重复使用相同的 Akka ActorSystem,还是可以在每次需要时创建一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10396552/

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