如果我们不定义路由器,Akka Actor是否并行运行?

Ste*_*Kuo 3 scala actor akka

我不太清楚Akka系统中的Router,Dispatcher和Executor.

如果我没有定义一个路由器,因此不给它一个组actor,那么actor是否并行运行?

如果我没有定义路由器,但定义并使用调度程序:

my-dispatcher {
  type = Dispatcher
  executor = "fork-join-executor"
  fork-join-executor {
    parallelism-min = 2
    parallelism-factor = 2.0
    parallelism-max = 10
  }
  throughput = 100
}
Run Code Online (Sandbox Code Playgroud)

演员是否并行奔跑?

Yuv*_*kov 5

如果我没有定义一个路由器,因此不给它一个组actor,那么actor是否并行运行?

Actor系统中的Dispatcher是一个包装器,ExecutionContext它有一个底层的线程池,它执行actor.如果你创造一切是一个单一的演员和传递消息给它,然后所有的消息都会到达同一个演员的邮箱,他会处理一个接一个.actor内部的执行同步发生.

如果您希望多个actor处理请求,那么这正是路由器的用途.如果你想拥有一组可以处理相同请求的actor,你可以分配一个路由器,它将为你管理一组actor,注意哪个actor可以获得多少工作量.

一个例子是当你有一个路由器并且你定义了一个内部的actor池,即RoundRobinPool只是以循环方式将消息分配给actor邮箱:

context.actorOf(
  Props(new MyActor())
    .withRouter(RoundRobinPool(nrOfInstances = 10)), name = "MyRouter")
Run Code Online (Sandbox Code Playgroud)

这将创建一个RouterRoundRobinPool包含10个演员.