繁体   English   中英

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

[英]how many threads do scala's parallel collections use by default?

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

谢谢

假设没有并发运行的进程和/或线程,这意味着所有CPU和内核都处于空闲状态,这将是CPU上每个逻辑处理器1个线程。 例如,如果您的英特尔处理器具有4个内核,但这些内核具有超线程,那么将有8个工作线程执行并行操作。

在任何情况下,这都是JDK中availableProcessors方法返回的相同值。

请注意,示例中的tabulate调用不是并行的 - 它是按顺序执行的。

对于Arrays上的par map,scala使用它的自定义ForkJoinThreadPool默认实现,它使用来自java运行时的检测到的处理器数。 你可以在这里看到它:

 public ForkJoinPool() {
        this(Math.min(MAX_CAP, Runtime.getRuntime().availableProcessors()),
             defaultForkJoinWorkerThreadFactory, null, false);
    }

根据这篇文章的评论,默认是每个核心1个线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM