配置叉连接线程池
问题描述:
我有一个关于使用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?
答
我们先来解释ForkJoinPool
中的并行性是如何工作的。线程数由单个(构造函数)参数parallelism
(默认情况下设置核心数)控制。 ForkJoinPool
试图保持最多parallelism
运行线程。但它可以决定产生更多的线程,如果其中一些线程被阻塞的话。例如。如果您有太多正在等待连接的分叉任务,则除非添加新线程,否则您的计算将被阻止;等待的线程是活动但不是运行(因为他们在等待)。更多解释here。
问题中的调度程序配置控制parallelism
参数将设置为什么值。它被设置为可用的处理器 * parallelism-factor
但是至少parallelism-min
和最多parallelism-max
。查看更多信息here和here。
在这种情况下将创建多少个线程?
并行度应该是2 cores * 4 -> 8 threads
。所以正在运行的线程数应该是8,但创建的线程总数可能会更高。
什么是需要设置的最大值和最小值这是我的情况是24和48
我认为这只是在你有不同数量的核心部署一台机器上的情况。
在你的代码示例中,是akka配置? – Mifeet
是的,这就是akka的配置风格! – sparkr