5

作業の盗用は、たとえば、JavaプラットフォームのFork/Joinフレームワークで利用できます。(fork / joinフレームワークはスレッドプールよりも優れていますか?を参照してください)-OmniThreadLibraryで同様のことが可能ですか?


作業の盗用:実行することが不足しているワーカースレッドは、まだビジー状態にある他のスレッドからタスクを盗むことができます。

4

1 に答える 1

6

この手法を「ワークスティーリング」と呼ぶかどうかはわかりませんが、実際、OmniThreadLibraryは、フォーク/結合の抽象化を実行するときにすべてのコアをビジー状態に保ちます。

Fork / Joinを使用する場合は、を呼び出してタスクを計算プールに送信しますComputeValueサブ計算の結果を取得するために呼び出すかAwait、サブ計算が終了するのを待って、サブ計算がまだ作業を完了していない場合、Value/Awaitは計算プールから別のタスクを取得して実行します。この新しいタスクが終了すると、サブ計算がその作業を完了したかどうかを再度チェックし、完了していない場合は次のサブタスクを処理します。

このメカニズムについては、OmniThreadLibrarywikiで詳しく説明されています。


編集

Fork/Joinのアプローチを「ワークスティーリング」と呼ぶべきではないと思います。OmniThreadLibraryの実装では、スレッドが実行を開始するまで、作業項目がスレッドに割り当てられることはありません。そして、スレッドが実行を開始すると、その目的がないため、誰もそれを盗むことはできません。

于 2012-07-06T19:17:07.790 に答える