2

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

  1. 机器有一个四核处理器
  2. 有一个调度器actor,它专门用于阻塞网络 I/O 来监听
  3. 工人演员都是非阻塞的。

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

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

4

1 回答 1

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 并不是唯一需要管理的资源。调整响应时间也有点不同。

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

于 2012-06-13T06:44:58.343 回答