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