0

並列化されたサブタスク セットの順次実行される部分に大きなタスクを分離できるようにする GPars 機能を探しています。

つまり、配列サイズKを反復し、それぞれがthreadCountのサイズを持つ並列タスク ブロックの順次割り当てを行います 。

言い換えれば、最初に配列を反復せず、一度にすべてのタスクを送信しますが、前のブロックの準備ができたら (OOM を防ぐ)、ページネーションなどを使用して、割り当てを順次実行します。

以下のコードのようなものですが、最初にページをリストしてタスクを送信する代わりに、ページを順番に処理する必要があります。

myHugeList.getNextPage().each { withPool(threadCount) { Closure.callAsync().get() } }

ありがとう、イェフィム

4

1 に答える 1

0

あなたはこれらの行に沿って何かを探しているかもしれません:

withPool(numOfThreads) { for(entriesInPage in myHugeList.splitIntoPages) { resultPages << entryInPage.collectParallel(myClosure) } } 欠点は、各反復が前の反復が完了するまで待機するため、一部のスレッドが十分に活用されないままになる可能性があることです。

代替手段の 1 つは、myHugeList を管理するディスパッチャからタスクをプルするアクターのグループです。

于 2012-07-06T07:39:25.960 に答える