Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 不';这不是每次都会创建新的Actor系统吗?_Scala_Akka - Fatal编程技术网

Scala 不';这不是每次都会创建新的Actor系统吗?

Scala 不';这不是每次都会创建新的Actor系统吗?,scala,akka,Scala,Akka,确认每次调用Akka.system.actorOf或Akka.system.scheduler时,它都会在应用程序中创建一个新的ActorSystem?查看一些代码,它每次必须创建一个新的actor时都会调用Akka.system.actorOf,我认为应该是context.actorOf来使用现有的ActorSystem(应该在应用程序启动时创建)。我的理解正确吗?每次调用Akka.system.actorOf来创建一个新的演员是非常错误的 根据文件: 使用ActorSystem将创建顶级参与

确认每次调用Akka.system.actorOf或Akka.system.scheduler时,它都会在应用程序中创建一个新的ActorSystem?查看一些代码,它每次必须创建一个新的actor时都会调用Akka.system.actorOf,我认为应该是context.actorOf来使用现有的ActorSystem(应该在应用程序启动时创建)。我的理解正确吗?每次调用Akka.system.actorOf来创建一个新的演员是非常错误的

根据文件:

使用ActorSystem将创建顶级参与者,由 actor系统提供的guardian actor,同时使用actor的上下文 将创建一个儿童演员

所以基本上,这取决于你想要实现什么

更多细节

编辑:

关于您的具体问题(很抱歉,我误解了您的意思),您应该将
ActorSystem
视为一个重量级结构,它将分配多达N个线程,每个Actor将在其中一个线程中运行(这里的关键点是不存在可变状态)。ActorSystems共享通用配置,例如调度器、部署、远程功能和地址。它们也是创建或查找演员的入口点

创建
ActorSystem
非常昂贵,因此您希望避免每次需要时都创建一个新系统。此外,您的参与者应该在相同的
ActorSystem
中运行,除非有充分的理由不这样做。
ActorSystem
的名称也是运行在其中的actor的路径的一部分

当前API中没有
Akka.system.actorOf
方法。通常,您持有对应用程序
ActorSystem
的引用,正如其他人已经向您展示的那样,并从该上下文中创建子参与者:

val system = akka.actor.ActorSystem("YourApplication");
val actor1 = system.actorOf(Props[Actor1], "Actor1")
val actor2 = system.actorOf(Props[Actor2], "Actor2")
因此,简而言之,我从未尝试过,但我假设每次调用
akka.actor.ActorSystem
都会尝试创建一个新的ActorSystem,如果没有提供不同的ActorSystem名称/配置,则可能会失败。

根据文档:

使用ActorSystem将创建顶级参与者,由 actor系统提供的guardian actor,同时使用actor的上下文 将创建一个儿童演员

所以基本上,这取决于你想要实现什么

更多细节

编辑:

关于您的具体问题(很抱歉,我误解了您的意思),您应该将
ActorSystem
视为一个重量级结构,它将分配多达N个线程,每个Actor将在其中一个线程中运行(这里的关键点是不存在可变状态)。ActorSystems共享通用配置,例如调度器、部署、远程功能和地址。它们也是创建或查找演员的入口点

创建
ActorSystem
非常昂贵,因此您希望避免每次需要时都创建一个新系统。此外,您的参与者应该在相同的
ActorSystem
中运行,除非有充分的理由不这样做。
ActorSystem
的名称也是运行在其中的actor的路径的一部分

当前API中没有
Akka.system.actorOf
方法。通常,您持有对应用程序
ActorSystem
的引用,正如其他人已经向您展示的那样,并从该上下文中创建子参与者:

val system = akka.actor.ActorSystem("YourApplication");
val actor1 = system.actorOf(Props[Actor1], "Actor1")
val actor2 = system.actorOf(Props[Actor2], "Actor2")

因此,简而言之,我从未尝试过它,但我假设每次调用
akka.actor.ActorSystem
都会尝试创建一个新的ActorSystem,如果没有提供不同的ActorSystem名称/配置,它可能会失败。

只有在调用
ActorSystem时才创建新的
ActorSystem
。应用
方法:

val system = ActorSystem("YourApplication")
当然,当您在系统上调用方法时,您不会创建新系统,即以下系统:

val actor = system.actorOf(Props[SomeActor], "someActor")
不会创建新系统,它只会在
系统中创建新的顶级参与者。当您在参与者之外时,通常会调用
system.actorOf
方法,例如,在初始化代码中,当尚未创建参与者时

另一方面,上下文是从参与者内部与系统交互的一种方式
context
Actor
trait的成员,它继承到您的Actor中。您可以使用
context
访问演员系统的调度程序、观看演员、创建子演员、更改演员的行为等
context.actorOf
将创建子演员


所以不,调用
system.actorOf
来创建参与者绝对没有错。您只需记住,当您使用
system.actorOf
时,您创建的是顶级演员,而这并不是您始终需要的。通常创建一个或多个顶级角色,然后这些顶级角色又创建子角色,依此类推。

只有在调用
ActorSystem时,才能创建新的
ActorSystem
。应用
方法:

val system = ActorSystem("YourApplication")
当然,当您在系统上调用方法时,您不会创建新系统,即以下系统:

val actor = system.actorOf(Props[SomeActor], "someActor")
不会创建新系统,它只会在
系统中创建新的顶级参与者。当您在参与者之外时,通常会调用
system.actorOf
方法,例如,在初始化代码中,当尚未创建参与者时

另一方面,上下文是从参与者内部与系统交互的一种方式
context
Actor
trait的成员,它继承到您的Actor中。您可以使用
context
访问演员系统的调度程序、观看演员、创建子演员、更改演员的行为等
context.actorOf
将创建子演员

所以不,调用
system.actorOf
来创建参与者绝对没有错。您只需要记住,当您使用
system.actorOf
时,您创建的是顶级演员,而这不是您需要的