为Scala 2.10中的所有集合设置并行度级别?

时间:2013-01-08 03:27:27

标签: scala parallel-processing scala-2.10

我了解如何通过可变tasksupport字段(c.f。https://stackoverflow.com/a/5425354/82970)为单个并行集合设置并行度级别。

  

如何在Scala 2.10中为所有新并行集合设置并行度级别?

一个辅助问题---是由并行集合“继承”的tasksupport与由它构建的新并行集合“继承”吗? (例如,使用takemap等)

1 个答案:

答案 0 :(得分:9)

  1. 我简要地查看了一下这些来源,如果我理解正确,有三个系统属性可用于配置默认执行上下文,它似乎用作默认任务支持。这些决定了任务支持对象的并行度。

    • scala.concurrent.context.minThreads:Int,最小并行度
    • scala.concurrent.context.numThreads:要么指定要直接使用的并行度级别,要么是字符串:“x”后跟Double(例如“x1.5”),然后乘以{{ 1}}
    • Runtime.getRuntime.availableProcessors:Int,最大并行度

    相关的源文件(如果我正确地遵循了所有内容)似乎是ExecutionContextImpl

  2. 至于你问题的第二部分:
    转换scala.concurrent.context.maxThreadsmap等操作应该保留已在原始集合上设置的任务支持。至少消息来源看起来那样。 :)
    大多数并行操作在ParIterableLike中定义,它们在Combiner中调用filter(通过工厂在ParIterableLike中的第568或581行获取原始任务支持)或设置任务直接支持最终的集合。