首页 文章

Scala:corePoolSize最大化Actor性能

提问于
浏览
2

我正在尝试基于经典工作池模型创建一个Scala应用程序服务器 . 鉴于:

  • 该机器有一个四核处理器

  • 有一个调度程序actor,专门用于阻止网络I / O监听

  • Worker 演员都是非阻挡的 .

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

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

1 回答

  • 6

    只是一些提示 .

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

    并不是的 . 以下是如何估计可以获得最大吞吐量的线程数:

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

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

相关问题