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