Multithreading 配置Fork-Join线程池

Multithreading 配置Fork-Join线程池,multithreading,scala,akka,fork-join,executioncontext,Multithreading,Scala,Akka,Fork Join,Executioncontext,我有一个关于使用fork-join线程池的简单问题。下面是我正在使用的一个简短示例: executor = "fork-join-executor" # Configuration for the fork join pool fork-join-executor { # Min number of threads to cap factor-based parallelism number to parallelism-min = 24 # Parallel

我有一个关于使用fork-join线程池的简单问题。下面是我正在使用的一个简短示例:

  executor = "fork-join-executor"
  # Configuration for the fork join pool
  fork-join-executor {
    # Min number of threads to cap factor-based parallelism number to
    parallelism-min = 24
    # Parallelism (threads) ... ceil(available processors * factor)
    parallelism-factor = 4.0
    # Max number of threads to cap factor-based parallelism number to
    parallelism-max = 48
  }
我不确定的是,在这种情况下会创建多少线程?我在一台2核的机器上运行,所以每个核有24个线程,最多48个线程


将并行系数设置为4.0时,可以并行运行的线程数将为8。那么,设置最小值和最大值(我的情况是24和48)需要什么呢?

让我们从解释并行性是如何工作的开始。线程的数量由单个(构造函数)参数
parallelism
(默认情况下是内核的数量)控制
ForkJoinPool
尝试最多保持
并行性
运行线程。但如果其中一些线程被阻塞,它可以决定生成更多线程。例如,如果您有太多的分叉任务等待加入,除非您添加新线程,否则您的计算将被阻止;正在等待的线程处于活动状态,但未运行(因为它们正在等待)。更多的解释

问题中的dispatcher配置控制
parallelism
参数将设置为什么值。它设置为可用处理器*
并行系数
,但至少
最小并行度
,最多
最大并行度
。请参阅更多信息和

在这种情况下将创建多少线程

并行性应该是
2核*4->8线程
。因此,运行线程的数量应该是8,但创建的线程总数可能更高

设置最小值和最大值(我的情况是24和48)需要什么


我认为只有当您部署在具有不同数量内核的机器上时,才会使用此配置。

在您的代码示例中,这是akka配置吗?是的,这是akka的配置风格!并行度由Parallelism max和Parallelism-min限定。基本上是max(Parallelism min,min(Parallelism max,cores*并行因子))的结果。