12

文字列のやや大きな (数百万項目程度) リストがあるとします。次のようなものを実行することをお勧めします。

val updatedList = myList.par.map(someAction).toList

...par.map(または、次のように、実行する前にリストをグループ化することをお勧めします。

val numberOfCores = Runtime.getRuntime.availableProcessors
val updatedList = 
  myList.grouped(numberOfCores).toList.par.map(_.map(someAction)).toList.flatten

更新:それは非常に高価であることを考えると( 、などsomeActionと比較して)groupedtoList

4

2 に答える 2

14

par.mapすでにコア数が考慮されているため、直接実行します。ただし、 を保持しないでくださいList。並列コレクションにするために完全なコピーが必要になるためです。代わりに、を使用してVectorください。

于 2012-04-07T14:05:51.777 に答える
8

示唆されているように、 list とparの使用は避けてください。これには、並列で簡単にトラバースできるコレクションにリストをコピーする必要があるためです。説明については、並列コレクションの概要を参照してください。

具象並列コレクション クラスのセクションで説明したように、 はより演算ParVector効率が悪い場合があるため、パフォーマンスを本当に気にする場合は、並列配列を使用するのが理にかなっています。mapParArray

しかし、someActionが十分に高価な場合、その計算コストは​​ と のシーケンシャル ボトルネックを隠しtoListますpar

于 2012-04-07T18:13:10.503 に答える