Akka 的 BalancingPool 调度器(BalancingDispatcher)是否每个 actor 一个线程?

Does Akka's BalancingPool dispatcher (BalancingDispatcher) have one thread per actor?

BalancingDispatcher 现已弃用,无法直接将 actor 分配给,但路由器的 BalancingPool 使用 BalancingDispatcher。

由于我们没有直接配置 BalancingDispatcher,我想知道 BalancingDispatcher 是否配置了等于 worker 数量的线程?

如果我们在代码中而不是在配置中生成 BalancingPool,这仍然以同样的方式工作吗?

提前感谢任何help/info!可能更适合在 Akka 邮件组中提问。或者我应该阅读源代码。

BalancingPool 确实为您为路由设置了平衡调度程序。可以通过提供 pool-dispatcher setting 来配置使用的线程数和执行器。默认情况下它使用一个 fork join 执行器,所以你可以给它以下设置:

pool-dispatcher {
  fork-join-executor { # force it to allocate exactly 5 threads
    parallelism-min = 5
    parallelism-max = 5
  }

  # executor = "thread-pool-executor" // can even change the executor here
  #thread-pool-executor {
  #  core-pool-size-min = 1
  #  core-pool-size-factor = 2.0
  #  core-pool-size-max = 5
  #}
}

如果您希望它正好使用 5 个线程。您可以参考 dispatcher docs 了解如何配置调度程序以及执行程序是什么。

PS:一般来说,Akka 问题通常在 akka-user mailing list 上得到最好的解决,团队在那里监控并帮助处理所有线程,但是也有一个活跃的 SO 社区,所以 "it depends" :-)