Multithreading Scala:corePoolSize最大化演员表现

Multithreading Scala:corePoolSize最大化演员表现,multithreading,scala,actor,Multithreading,Scala,Actor,我正在尝试基于经典的工作池模型制作一个Scala应用服务器。 鉴于: 这台机器有一个四核处理器 有一个调度程序参与者,专门阻止网络I/O侦听 工人演员都是非阻塞的 corePoolSize最大化性能的最佳价值是什么? 理想情况下,当工作线程池的大小等于处理器内核的数量时,性能会最大化。 因此,在本例中,我猜最佳值应该是5(调度程序为1,工作程序为4),或者我可以将该值设置为4,并覆盖调度程序参与者的调度程序方法,以便它不会与工作程序共享线程池 这是正确的吗?谢谢你的建议。 谢谢 只是一些提示 理

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

  • 这台机器有一个四核处理器
  • 有一个调度程序参与者,专门阻止网络I/O侦听
  • 工人演员都是非阻塞的
  • corePoolSize最大化性能的最佳价值是什么? 理想情况下,当工作线程池的大小等于处理器内核的数量时,性能会最大化。 因此,在本例中,我猜最佳值应该是5(调度程序为1,工作程序为4),或者我可以将该值设置为4,并覆盖调度程序参与者的调度程序方法,以便它不会与工作程序共享线程池

    这是正确的吗?谢谢你的建议。 谢谢

    只是一些提示

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

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

    N = C * U * (1 + W/C) 
    
    其中
    N=线程数
    C=CPU内核数
    U=目标CPU利用率
    W/C=等待时间与计算时间之比
    (等待时间指IO等)

    但是请注意,上面的等式只考虑CPU,CPU不是唯一需要管理的资源。调整响应时间也会有点不同


    老生常谈的答案是,你必须进行测试,看看什么是最好的选择。您可能可以使用上述公式作为起点。还要注意核心池大小!=最大池大小

    谢谢你的回答,Zwei。这有帮助。:)