我了解如何通过可变tasksupport
字段(c.f。https://stackoverflow.com/a/5425354/82970)为单个并行集合设置并行度级别。
如何在Scala 2.10中为所有新并行集合设置并行度级别?
一个辅助问题---是由并行集合“继承”的tasksupport
与由它构建的新并行集合“继承”吗? (例如,使用take
,map
等)
答案 0 :(得分:9)
我简要地查看了一下这些来源,如果我理解正确,有三个系统属性可用于配置默认执行上下文,它似乎用作默认任务支持。这些决定了任务支持对象的并行度。
scala.concurrent.context.minThreads
:Int,最小并行度scala.concurrent.context.numThreads
:要么指定要直接使用的并行度级别,要么是字符串:“x”后跟Double(例如“x1.5”),然后乘以{{ 1}} Runtime.getRuntime.availableProcessors
:Int,最大并行度相关的源文件(如果我正确地遵循了所有内容)似乎是ExecutionContextImpl。
至于你问题的第二部分:
转换scala.concurrent.context.maxThreads
,map
等操作应该保留已在原始集合上设置的任务支持。至少消息来源看起来那样。 :)
大多数并行操作在ParIterableLike中定义,它们在Combiner中调用filter
(通过工厂在ParIterableLike中的第568或581行获取原始任务支持)或设置任务直接支持最终的集合。