我正在尝试为受CPU约束的角色安排调度程序,并且有点困惑它如何适合我的角色布局。
我在akka上有以下演员布局:
mapperX
演员实际上是由不同的/userX
演员初始化的同一演员类。
每个映射器actor都有3个CPU绑定任务,我使用Futures
来安排任务。根据这些信息,我认为以下定制调度程序符合其要求:
mapper-dispatcher {
type = Dispatcher
executor = "fork-join-executor"
fork-join-executor {
parallelism-min = 3
parallelism-factor = 2.0
parallelism-max = 3
}
}
问题出在我的演员布局上。我的印象是,当我使用上述调度程序初始化映射器actor时,它们将共享同一调度程序。我没有最多/user
个演员或/mapper
个演员(他们是在用户注册时产生的)。结果,上述调度程序将不会削减它(更多的actor意味着更多的争夺上述调度程序的线程),并且每个mapper
actor的并行性都会受到影响。
我认为我的演员布局有误。有人可以说明解决该问题的正确方法(感觉就像我需要一个单独的mapper
路由器,该路由器将其下的工人控制在并行度上,以控制并行度的这种不受控制的增长)。
我对akka调度员来说还很陌生,我们将为您提供任何帮助。谢谢。