2013-01-08 9 views
8

変更可能なtasksupportフィールド(c.f. https://stackoverflow.com/a/5425354/82970)を使用して、1つの並列コレクションの並列処理レベルを設定する方法を理解しています。Scala 2.10のすべてのコレクションの並列度を設定しますか?

Scala 2.10の新しい並列コレクションの並列度はどのように設定できますか?

副次的な質問は、tasksupportは、それから構築された新しい並列コレクションによって継承された並列コレクションに関連付けられていますか? (例えばtakemap、などと)

答えて

9
  1. であるように思われ、私は簡単にソースを見て、私が正しく物事を理解していれば、デフォルトの実行コンテキストを設定するために使用することができる3つのシステムプロパティがありますデフォルトのタスクサポートとして使用されます。これらは、タスク・サポート・オブジェクトの並列性レベルを決定します。

    • scala.concurrent.context.minThreads:INT、最小並列度
    • scala.concurrent.context.numThreads:直接使用する並列度を指定するためのInt、または文字列:ダブル続く「X」(例えば「×1.5」 )、その後、Runtime.getRuntime.availableProcessors
    • scala.concurrent.context.maxThreadsと乗算されます。int、最大並列度

    関連するソースファイルを(私はすべてを正しく従った場合は)ExecutionContextImplのようです。あなたの質問の後半部分については


  2. mapfilterなどのような操作を変換するには、元のコレクションに設定されているタスクのサポートを維持する必要があります。少なくとも、ソースはそのように見えます。 :)
    ほとんどの並列操作はParIterableLikeで定義されており、resultWithTaskSupportCombiner(ParIterableLikeの568または581行でファクトリを介して設定された元のタスクサポートを取得)するか、結果のコレクションに直接タスクサポートを設定します。

+0

'、おかげで、これは本当によく文書化されていないと私はそれが' map' Scalaの2.11.8のようにのように見えるやった簡単なテストでは、この可変 'tasksupport'プロパティ:( –

+1

を憎みますfilter'などの並列コレクションの操作では 'tasksupport'と並列レベルが保持されません。私は直感的ではありません。 – Bogdan

+0

これを回避するためにタスクサポートをグローバルに設定したいと思うでしょう - http://stackoverflow.com/質問/ 17865823/how-do-i-set-the-default-number-of-scala-2-10-parallel-collections – mut1na

関連する問題