配置Fork Join线程池

时间:2016-05-10 08:58:08

标签: 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
    # 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?

1 个答案:

答案 0 :(得分:5)

让我们首先解释ForkJoinPool中的并行性是如何工作的。线程数由单个(构造函数)参数parallelism(默认情况下的核心数)控制。 ForkJoinPool尝试保留最多parallelism 正在运行的主题。但它可以决定产生更多线程,如果其中一些被阻止。例如。如果你有太多等待连接的分叉任务,你的计算将被阻止,除非你添加新的线程;等待线程活动正在运行(因为它们等待)。更多解释here

问题中的调度程序配置控制parallelism参数的设置值。它设置为可用处理器 * parallelism-factor但至少parallelism-min且最多parallelism-max。查看更多信息herehere

  

在这种情况下会创建多少个线程?

并行度应为2 cores * 4 -> 8 threads。因此,运行线程的数量应为8,但总共创建的线程数可能更高。

  

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

我认为只有在部署在具有不同内核数量的计算机上时才会这样做。