Scala:corePoolSize最大化Actor性能

时间:2012-06-13 01:30:00

标签: multithreading scala actor

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

  1. 该机器有一个四核处理器
  2. 有一个调度程序actor,专门用于阻止网络I / O侦听
  3. 工人演员都是非阻挡的。
  4. corePoolSize最大化性能的最佳价值是什么? 理想情况下,当工作线程池的大小等于处理器核心数时,性能最大化。 所以在这种情况下,我猜最好的值是5(调度程序为1,工作程序为4),或者我可以将值设置为4并覆盖调度程序actor的调度程序方法,这样它就不会与工作人员共享线程池。

    这是对的吗?任何建议表示赞赏 谢谢!

1 个答案:

答案 0 :(得分:6)

只是一些提示。

  

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

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

N = C * U * (1 + W/C) 

其中N = number of threadsC = number of CPU coresU = target CPU utilization rateW/C = Waiting time to Computing time ratio(等待时间表示IO等)。

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

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