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