我正在尝试基于经典工作池模型创建一个Scala应用程序服务器 . 鉴于:
-
该机器有一个四核处理器
-
有一个调度程序actor,专门用于阻止网络I / O监听
-
Worker 演员都是非阻挡的 .
corePoolSize最大化性能的最佳 Value 是什么?理想情况下,当工作线程池的大小等于处理器核心数时,性能最大化 . 所以在这种情况下,我猜最好的值是5(调度程序为1,工作程序为4),或者我可以将值设置为4并覆盖调度程序actor的调度程序方法,这样它就不会与工作人员共享线程池 .
它是否正确?任何建议表示赞赏谢谢!
1 回答
只是一些提示 .
并不是的 . 以下是如何估计可以获得最大吞吐量的线程数:
其中
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不是唯一要管理的资源 . 调整响应时间也会有点不同 .
陈词滥调的答案是你必须进行测试才能看到最好的选择 . 你可以使用上面的公式作为起点 . 另请注意,核心池大小!=最大池大小 .