【发布时间】:2014-04-18 23:30:04
【问题描述】:
当我调用Array.tabulate(100)(i=>i).par map { _+ 1} 时,使用了多少线程?
谢谢
【问题讨论】:
标签: multithreading scala parallel-processing
当我调用Array.tabulate(100)(i=>i).par map { _+ 1} 时,使用了多少线程?
谢谢
【问题讨论】:
标签: multithreading scala parallel-processing
假设没有并发运行的进程和/或线程,这意味着所有 CPU 和内核都处于空闲状态,这将是 CPU 上每个逻辑处理器 1 个线程。例如,如果您有一个具有 4 个内核的 Intel 处理器,但这些内核具有超线程,那么将有 8 个工作线程执行并行操作..
无论如何,这与 JDK 中 availableProcessors 方法返回的值相同。
请注意,您的示例中的 tabulate 调用不是并行的 - 它是按顺序执行的。
【讨论】:
对于数组上的 par 映射,scala 使用它的自定义 ForkJoinThreadPool 默认实现,它使用从 java 运行时检测到的处理器数量。可以看here:
public ForkJoinPool() {
this(Math.min(MAX_CAP, Runtime.getRuntime().availableProcessors()),
defaultForkJoinWorkerThreadFactory, null, false);
}
【讨论】:
根据this帖子的评论,默认是每个核心1个线程。
【讨论】: