4

公式ドキュメントによると、並列コレクションを作成するには 2 つのオプションがあります。

1)

// There's a little bug here, doesn't matter for the sake of the question
import scala.collection.parallel.mutable.ParArray
val pv = new ParVector[Int]

2)

val pv = Vector(1,2,3,4,5,6,7,8,9).par

さて、違いは何ですか?単純な順次コレクションから変換すると、パフォーマンスが低下しますか?

少し並列なコレクション (たとえば、数千の要素) を作成する必要がある場合、最初から作成するか、変換しますか?

君たちありがとう!

編集:

@oxbow_lakes が言うように、このトピックに焦点を当てたドキュメントがありますが、私は「経験豊富なアドバイス」を得ようとしています。たとえば、DB から大きなコレクションを読み取る必要がある場合、あなたはどうしますか。

4

2 に答える 2

3

コレクションによって異なります。Vectorは基本的に無料でParVector、ベクターの単なるラッパーです。についても同じですArrays。他のもの、たとえばListは、並列処理により適した別の構造に完全にコピーする必要があります。結果もリストにしたい場合は、新しいリストにコピーして戻します。

scalaドキュメンテーションサイトのこの新しいガイド、セクションCreating a parallel collectionをご覧ください。

于 2012-04-04T07:26:48.967 に答える
3

parメソッドの公式ドキュメントには次のように書かれています。

ほとんどのコレクション型では、このメソッドはすべての要素をコピーして新しい並列コレクションを作成します。これらのコレクションの場合、par には線形時間がかかります[...]

特定のコレクション (ParArrayや などmutable.ParHashMap) は、同じ基礎となるデータセットを共有する並列コレクションを作成することで、この既定の動作をオーバーライドします。これらのコレクションの場合、 par には一定または準線形の時間がかかります。

つまり、一般に O(n) での操作ですが、変更可能なコレクションと を使用する場合を除いて、O ( ParArrayn ParHashMap) よりも小さいですが、一定時間ではない可能性があります。

于 2012-04-04T07:28:14.550 に答える