1. ホーム
  2. concurrency

[解決済み] withPoolと並列

2022-02-15 14:25:14

質問

の使い方の例を見つけました。 withPool . という単語を追加するだけで良いと書かれています。 Parallel のようなGroovyのメソッドに collect, find, each の中に入れてください。 withPool で、そのコードを並列実行します。

import static groovyx.gpars.GParsPool.withPool

list = 1..1000000

withPool{
    squares = list.collectParallel { it * it}
}
println squares

本当に平行かどうか確認する方法はありますか?
同じコードでベンチマークテストをしてみましたが、シーケンシャルな方法です。
で、並列の方がずっと遅かったです。

解決方法は?

の意味がよくわかりません。 しかし、シーケンシャルと並列の方法は、はるかに遅かった」。 ...

これは並列で実行されますが、この単純な例では、他のプロセッサにジョブを発行したり、結果の順序を処理する余分なコストがかかるため、単にいくつかの数字を掛けるよりも時間がかかると思われます。

動作することを示す単純な例としては、次のようなことができます。

import static groovyx.gpars.GParsPool.withPool

list = [ 2, 2, 2, 2, 2 ]

withPool{
    result = list.collectParallel {
        Thread.sleep( it * 1000 )
        it
    }
}
println result

したがって、結果は次のようになります。 [2,2,2,2,2] しかし collectParallel を使うと、10秒以内に終了するはずです。 collect バージョン

もちろん、これは複数のコアを持っているかどうかに依存します ;-)