当我调用Array.tabulate(100)(i=>i).par map { _+ 1}
时,正在使用多少个线程?
由于
答案 0 :(得分:6)
假设没有并发运行的进程和/或线程,这意味着所有CPU和内核都处于空闲状态,这将是CPU上每个逻辑处理器1个线程。例如,如果您的英特尔处理器具有4个内核,但这些内核具有超线程,那么将有8个工作线程执行并行操作。
在任何情况下,这都是JDK中availableProcessors
方法返回的相同值。
请注意,示例中的tabulate
调用不是并行的 - 它是按顺序执行的。
答案 1 :(得分:2)
对于Arrays上的par map,scala使用它的自定义ForkJoinThreadPool默认实现,它使用来自java运行时的检测到的处理器数。你可以看到它here:
public ForkJoinPool() {
this(Math.min(MAX_CAP, Runtime.getRuntime().availableProcessors()),
defaultForkJoinWorkerThreadFactory, null, false);
}
答案 2 :(得分:0)
根据对this帖子的评论,默认值为每个核心1个帖子。