【问题标题】:how many threads do scala's parallel collections use by default?scala 的并行集合默认使用多少个线程?
【发布时间】:2014-04-18 23:30:04
【问题描述】:

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

谢谢

【问题讨论】:

    标签: multithreading scala parallel-processing


    【解决方案1】:

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

    无论如何,这与 JDK 中 availableProcessors 方法返回的值相同。

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

    【讨论】:

      【解决方案2】:

      对于数组上的 par 映射,scala 使用它的自定义 ForkJoinThreadPool 默认实现,它使用从 java 运行时检测到的处理器数量。可以看here:

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

      【讨论】:

        【解决方案3】:

        根据this帖子的评论,默认是每个核心1个线程。

        【讨论】:

          猜你喜欢
          • 2013-07-25
          • 1970-01-01
          • 1970-01-01
          • 2013-09-27
          • 1970-01-01
          • 1970-01-01
          • 2020-11-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多