scala的并行集合默认使用多少个线程?

时间:2014-04-18 23:30:04

标签: multithreading scala parallel-processing

当我调用Array.tabulate(100)(i=>i).par map { _+ 1}时,正在使用多少个线程?

由于

3 个答案:

答案 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个帖子。