次のように、 を呼び出すコレクションがあります.par
。
myCollection.par.map(element => longRunningOperation(element)).seq
println("after map")
println を呼び出す.seq
前に、続行する前にすべてのスレッドが結合され、すべてのマップが完了することを保証しますか?
次のように、 を呼び出すコレクションがあります.par
。
myCollection.par.map(element => longRunningOperation(element)).seq
println("after map")
println を呼び出す.seq
前に、続行する前にすべてのスレッドが結合され、すべてのマップが完了することを保証しますか?
map
操作が呼び出されると、ワーカー スレッドが起動されます。それらはすべて、map
操作が完了する前にフレームワークによって結合されます。呼び出すまでに、seq
実行中のワーカー スレッドはもうありません。
はい、そうなります。.seq
実際、最後 に電話する必要はありません。
このような質問に答える簡単な方法は、副作用がない場合、並列コレクションは非並列コレクションとまったく同じセマンティクスを持つことを覚えておくことです。longRunningOperation のコードに目に見える副作用がない限り、コードが並列で実行されていることを確認できる唯一の方法は、プロセッサの使用率をチェックすることです。