Scala:corePoolSize,以最大化Actor的性能



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

  1. 该机器具有四核处理器
  2. 有一个调度程序Actor专用于阻止网络I/O来侦听
  3. 工人演员都是非阻塞的。

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

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

只是一些提示。

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

没有。下面介绍了如何估算可以获得最大吞吐量的线程数:

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

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

最新更新