gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:31:24 24 4
gpt4 key购买 nike

我对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
}

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 的包装器。它有一个底层线程池,它在其上执行actor。如果您创建的只是一个actor 并将消息传递给它,那么所有消息都将到达同一个actor 邮箱,他将一一处理该邮箱。 Actor 内部的执行是同步发生的。

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

一个例子是当你有一个路由器并且你定义了一个内部角色池,即 RoundRobinPool它只是以循环方式将消息分配给 Actor 邮箱:
context.actorOf(
Props(new MyActor())
.withRouter(RoundRobinPool(nrOfInstances = 10)), name = "MyRouter")

这将创建一个 RouterRoundRobinPool其中包含 10 个 Actor 。

关于scala - 如果我们不定义路由器,Akka Actor 是否可以并行运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39590497/

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