配置叉连接线程池

配置叉连接线程池

问题描述:

我有一个关于使用fork连接线程池的简单问题。这里是我正在使用的一个简短的例子:配置叉连接线程池

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?

+0

在你的代码示例中,是akka配置? – Mifeet

+0

是的,这就是akka的配置风格! – sparkr

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

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

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

并行度应该是2 cores * 4 -> 8 threads。所以正在运行的线程数应该是8,但创建的线程总数可能会更高。

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

我认为这只是在你有不同数量的核心部署一台机器上的情况。