我不太清楚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)
演员是否并行奔跑?
如果我没有定义一个路由器,因此不给它一个组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)
这将创建一个Router与RoundRobinPool包含10个演员.
| 归档时间: |
|
| 查看次数: |
1203 次 |
| 最近记录: |