作業の盗用は、たとえば、JavaプラットフォームのFork/Joinフレームワークで利用できます。(fork / joinフレームワークはスレッドプールよりも優れていますか?を参照してください)-OmniThreadLibraryで同様のことが可能ですか?
作業の盗用:実行することが不足しているワーカースレッドは、まだビジー状態にある他のスレッドからタスクを盗むことができます。
作業の盗用は、たとえば、JavaプラットフォームのFork/Joinフレームワークで利用できます。(fork / joinフレームワークはスレッドプールよりも優れていますか?を参照してください)-OmniThreadLibraryで同様のことが可能ですか?
作業の盗用:実行することが不足しているワーカースレッドは、まだビジー状態にある他のスレッドからタスクを盗むことができます。
この手法を「ワークスティーリング」と呼ぶかどうかはわかりませんが、実際、OmniThreadLibraryは、フォーク/結合の抽象化を実行するときにすべてのコアをビジー状態に保ちます。
Fork / Joinを使用する場合は、を呼び出してタスクを計算プールに送信しますCompute
。Value
サブ計算の結果を取得するために呼び出すかAwait
、サブ計算が終了するのを待って、サブ計算がまだ作業を完了していない場合、Value
/Await
は計算プールから別のタスクを取得して実行します。この新しいタスクが終了すると、サブ計算がその作業を完了したかどうかを再度チェックし、完了していない場合は次のサブタスクを処理します。
このメカニズムについては、OmniThreadLibrarywikiで詳しく説明されています。
編集
Fork/Joinのアプローチを「ワークスティーリング」と呼ぶべきではないと思います。OmniThreadLibraryの実装では、スレッドが実行を開始するまで、作業項目がスレッドに割り当てられることはありません。そして、スレッドが実行を開始すると、その目的がないため、誰もそれを盗むことはできません。