【发布时间】:2015-10-11 19:29:03
【问题描述】:
据我了解,fork-join-executor 是创建参与者系统时提供 non 时的默认调度程序 谁能给我解释一下:
fork-join-executor {
# Min number of threads to cap factor-based parallelism number to
parallelism-min = 8
# The parallelism factor is used to determine thread pool size using the
# following formula: ceil(available processors * factor). Resulting size
# is then bounded by the parallelism-min and parallelism-max values.
parallelism-factor = 3.0
# Max number of threads to cap factor-based parallelism number to
parallelism-max = 64
# Setting to "FIFO" to use queue like peeking mode which "poll" or "LIFO" to use stack
# like peeking mode which "pop".
task-peeking-mode = "FIFO"
}
虽然我理解每个单词,但我不理解这里解释的完整语义。
- ceil 是什么意思?在 ceil(可用处理器 * 因子)
- 什么是基于因子的并行性?
有人可以用英语向我整体解释一下上面的配置是什么意思吗?通过在这里和那里阅读许多帖子,我有点明白,默认情况下,akka 会设置一个线程池执行器,为每个核心分配和线程。因此,如果你有 2 个两核处理器,你最终会得到 4 个线程。无论如何,您实际上可以做到多少平行。除此之外,它是并发的,但严格来说不是完全并行的。虽然这是另一个问题。
因此,如果有人可以用 2 个机器示例(根据他们的处理器配置)来解释上述配置,以及由此产生的线程数,那就太好了。
【问题讨论】:
-
ceil = 上限,或刚好高于给定值的下一个整数。 IE。 ceil(4.8) = 5, ceil(4.2) = 5, ceil(5.1) = 6
-
并行系数大致是您希望每个可用处理器拥有多少线程
-
所以跟每个处理器的核数没有关系?
-
这不适合我。无论我有一个多核处理器还是一个单核处理器都没有任何区别。这根本不符合逻辑。除了在通用机器范围内实际上有超过 1 个物理处理器的机器之外。它始终是 1 个基于 2、4、6 或 8 核的处理器。这些是我们拥有的典型处理器。你是在告诉我,即使是 8 核,我的线程池大小也会与 1 核相同?
-
你怎么能提前知道你的程序将在哪里运行?