【问题标题】:Scala: corePoolSize to maximize the Actor performanceScala:corePoolSize 最大化 Actor 性能
【发布时间】:2012-06-15 22:50:33
【问题描述】:

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

  1. 机器有一个四核处理器
  2. 有一个调度器参与者,专门用于阻止网络 I/O 进行监听
  3. worker actor 都是非阻塞的。

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

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

【问题讨论】:

    标签: multithreading scala actor


    【解决方案1】:

    只是一些提示。

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

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

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

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

    【讨论】:

    • 谢谢你的回答,Zwei。它有帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2010-11-24
    • 2010-09-30
    • 2014-10-28
    • 2019-03-17
    相关资源
    最近更新 更多