Scalaは、標準言語の一部として並列マップ操作を実行する方法を提供しますか?
たとえば、次のようになります。
scala> val a = List((1,2), (3,4), (3,6))
a: List[(Int, Int)] = List((1,2), (3,4), (3,6))
できます:
scala> a.map(tup => tup._1 + tup._2)
res0: List[Int] = List(3, 7, 9)
ただし、私の知る限り、これは提供された関数をリストオブジェクトに順番にマップします。関数を個別のスレッド(または同等のもの)の各要素に適用し、結果を結果リストに収集する組み込みの方法はありますか?
par
を追加すると、並列コレクションが取得され、そのコレクションに対する操作が並列に処理されます。通常のコレクションに戻すには、toList
を呼び出します。
したがって、コードは次のようになります。
a.par.map(tup => tup._1 + tup._2).toList
または.seq
シーケンシャルコレクション(並列コレクションの反対)を取得します。
a.par.map(tup => tup._1 + tup._2).seq
par
は、リストを分割して複数のスレッドに処理します。次に、結果のtasksupport
の- ParSeq
メンバーを変更することにより、スレッド化の実行方法を調整できます。