[英]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.