如果不定义Router,Akka Actor运行会并行吗?
Does Akka Actor run in parallel if we do not define a Router?
我对Akka系统中的Router、Dispatcher、Executor不是很清楚
如果我没有定义路由器,因此不给它一个组演员,演员是否并行运行?
如果我不定义路由器,而是定义和使用调度程序:
my-dispatcher {
type = Dispatcher
executor = "fork-join-executor"
fork-join-executor {
parallelism-min = 2
parallelism-factor = 2.0
parallelism-max = 10
}
throughput = 100
}
actor是否并行?
If I do not define a router and therefore do not give it a group
actors, the actor runs in parallel or not?
Actor 系统中的 Dispatcher 是 ExecutionContext
的包装器,它有一个底层线程池,它在上面执行 actors。如果你创建的只是一个 单个 actor 并将消息传递给它,那么所有消息将到达同一个 actor 邮箱,他将逐一处理。 actor 内部的执行同步.
如果您希望多个参与者处理一个请求,那么这正是路由器的用途。如果你想要一组可以相同处理请求的演员,你分配一个路由器,它会为你管理这组演员,注意哪个演员得到多少工作量。
一个例子是当你有一个路由器并且你定义了一个内部演员池,即 RoundRobinPool
它只是以循环方式将消息分配给演员邮箱:
context.actorOf(
Props(new MyActor())
.withRouter(RoundRobinPool(nrOfInstances = 10)), name = "MyRouter")
这将创建一个 Router
和一个包含 10 个演员的 RoundRobinPool
。
消息在 Actor 中串行执行
所以说"one actor is no actor"
向演员发送消息时。它落在演员邮箱内。邮箱中的消息以串行方式一个接一个地处理。这里要注意的一件重要事情是,actor 确保每个消息行为都在单个线程中执行,它可以是不同的线程。
因此路由器创建了一组参与者并将消息路由到一组参与者,以便每个参与者同时并以并行方式处理它
我对Akka系统中的Router、Dispatcher、Executor不是很清楚
如果我没有定义路由器,因此不给它一个组演员,演员是否并行运行?
如果我不定义路由器,而是定义和使用调度程序:
my-dispatcher {
type = Dispatcher
executor = "fork-join-executor"
fork-join-executor {
parallelism-min = 2
parallelism-factor = 2.0
parallelism-max = 10
}
throughput = 100
}
actor是否并行?
If I do not define a router and therefore do not give it a group actors, the actor runs in parallel or not?
Actor 系统中的 Dispatcher 是 ExecutionContext
的包装器,它有一个底层线程池,它在上面执行 actors。如果你创建的只是一个 单个 actor 并将消息传递给它,那么所有消息将到达同一个 actor 邮箱,他将逐一处理。 actor 内部的执行同步.
如果您希望多个参与者处理一个请求,那么这正是路由器的用途。如果你想要一组可以相同处理请求的演员,你分配一个路由器,它会为你管理这组演员,注意哪个演员得到多少工作量。
一个例子是当你有一个路由器并且你定义了一个内部演员池,即 RoundRobinPool
它只是以循环方式将消息分配给演员邮箱:
context.actorOf(
Props(new MyActor())
.withRouter(RoundRobinPool(nrOfInstances = 10)), name = "MyRouter")
这将创建一个 Router
和一个包含 10 个演员的 RoundRobinPool
。
消息在 Actor 中串行执行
所以说"one actor is no actor"
向演员发送消息时。它落在演员邮箱内。邮箱中的消息以串行方式一个接一个地处理。这里要注意的一件重要事情是,actor 确保每个消息行为都在单个线程中执行,它可以是不同的线程。
因此路由器创建了一组参与者并将消息路由到一组参与者,以便每个参与者同时并以并行方式处理它