2

次のように、 を呼び出すコレクションがあります.par

myCollection.par.map(element => longRunningOperation(element)).seq
println("after map")

println を呼び出す.seq前に、続行する前にすべてのスレッドが結合され、すべてのマップが完了することを保証しますか?

4

2 に答える 2

8

map操作が呼び出されると、ワーカー スレッドが起動されます。それらはすべて、map操作が完了する前にフレームワークによって結合されます。呼び出すまでに、seq実行中のワーカー スレッドはもうありません。

于 2011-08-19T11:18:55.503 に答える
4

はい、そうなります。.seq実際、最後 に電話する必要はありません。

このような質問に答える簡単な方法は、副作用がない場合、並列コレクションは非並列コレクションとまったく同じセマンティクスを持つことを覚えておくことです。longRunningOperation のコードに目に見える副作用がない限り、コードが並列で実行されていることを確認できる唯一の方法は、プロセッサの使用率をチェックすることです。

于 2011-08-19T12:32:58.010 に答える