10

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

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

一个附属问题 ---tasksupport与并行集合相关联的是由它构建的新并行集合“继承”吗?(例如,使用take,map等)

4

1 回答 1

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

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

    相关的源文件(如果我正确地遵循了一切)似乎是ExecutionContextImpl

  2. 至于你的问题的第二部分:
    转换操作,如等mapfilter应保留已在原始集合上设置的任务支持。至少消息来源看起来是这样的。:)
    大多数并行操作是在ParIterableLikeresultWithTaskSupport中定义的,它们要么调用Combiner(它通过 ParIterableLike 中的第 568 行或第 581 行中的工厂获取原始任务支持集),要么直接在结果集合上设置任务支持。

于 2013-01-12T08:36:55.650 回答