spa*_*rkr 4 multithreading scala fork-join akka 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
}
Run Code Online (Sandbox Code Playgroud)
我不确定的是,在这种情况下会创建多少个线程?我正在运行2核心机器,因此每个核心有24个线程,最多48个线程?
并行因子设置为4.0时,可并行运行的线程数将为8.那么设置最小值和最大值的需要是什么,我的情况是24和48?
让我们首先解释并行性如何ForkJoinPool运作.线程数由单个(构造函数)参数parallelism(默认情况下的核心数)控制.ForkJoinPool试图保持最多parallelism 运行的线程.但它可以决定产生更多线程,如果其中一些被阻止.例如,如果你有太多等待连接的分叉任务,除非你添加新线程,否则你的计算将被阻止; 等待线程处于活动状态但未运行(因为它们正在等待).这里有更多解释.
问题中的调度程序配置控制parallelism参数将设置为的值.它被设置为可用的处理器*parallelism-factor但至少parallelism-min和最多parallelism-max.在这里和这里查看更多信息.
在这种情况下将创建多少个线程?
并行性应该是2 cores * 4 -> 8 threads.因此,运行线程的数量应为8,但总共创建的线程数可能更高.
设置最小值和最大值的需要是什么,我的情况是24和48
我认为只有在部署在具有不同内核数量的计算机上时才会这样.
| 归档时间: |
|
| 查看次数: |
1112 次 |
| 最近记录: |