Scala:corePoolSize最大化Actor性能

K J*_*K J 2 multithreading scala actor

我正在尝试基于经典工作池模型创建一个Scala应用程序服务器.鉴于:

  1. 这台机器有一个四核处理器
  2. 有一个调度程序actor,专门用于阻止网络I/O监听
  3. 工人演员都是非阻挡的.

corePoolSize最大化性能的最佳价值是什么?理想情况下,当工作线程池的大小等于处理器核心数时,性能最大化.所以在这种情况下,我猜最好的值是5(调度程序为1,工作程序为4),或者我可以将值设置为4并覆盖调度程序actor的调度程序方法,这样它就不会与工作人员共享线程池.

它是否正确?任何建议表示赞赏 谢谢!

Enn*_*oji 6

只是一些提示.

理想情况下,当工作线程池的大小等于处理器核心数时,性能最大化.

并不是的.以下是如何估计可以获得最大吞吐量的线程数:

N = C * U * (1 + W/C) 
Run Code Online (Sandbox Code Playgroud)

其中N = number of threads,C = number of CPU cores,U = target CPU utilization rate,W/C = Waiting time to Computing time ratio(等待时间是指IO等).

但请注意,上述等式仅考虑CPU,而CPU不是唯一要管理的资源.调整响应时间也会有点不同.

陈词滥调的答案是你必须进行测试才能看到最好的选择.你可以使用上面的公式作为起点.另请注意,核心池大小!=最大池大小.