ワークスチールは、たとえば、JavaプラットフォームのFork/Joinフレームワークで利用できます。 (How is the fork/join framework better than a thread pool?を参照) - OmniThreadLibraryと同様の可能性がありますか?盗みOmnithreadLibraryは "仕事を盗む"をサポートしていますか?
仕事:やるべき事を使い果たしワーカースレッドがまだ忙しいです他の スレッドからタスクを盗むことができます。
ワークスチールは、たとえば、JavaプラットフォームのFork/Joinフレームワークで利用できます。 (How is the fork/join framework better than a thread pool?を参照) - OmniThreadLibraryと同様の可能性がありますか?盗みOmnithreadLibraryは "仕事を盗む"をサポートしていますか?
仕事:やるべき事を使い果たしワーカースレッドがまだ忙しいです他の スレッドからタスクを盗むことができます。
私はこのテクニックを "仕事盗む"と呼んでもわかりませんが、OmniThreadLibraryは実際にはフォーク/結合抽象化を実行するときにすべてのコアをビジー状態に保ちます。
フォーク/結合を使用すると、Compute
を呼び出して計算プールにタスクを送信します。サブコンピュータの結果を得るためにValue
を呼び出すか、またはAwait
がサブコンピュータの終了を待機し、サブコンピュータがまだ完了していない場合、Value
/Await
は計算プールから別のタスクを実行します。この新しいタスクが終了すると、サブコンピュータがその作業を完了したかどうかが再びチェックされ、そうでなければ次のサブタスクが処理されます。
このメカニズムについては、OmniThreadLibrary wikiに詳しく説明されています。
EDIT
私はフォークを考えていない/ "仕事は盗む" と呼ばれるべきアプローチに参加しましょう。 OmniThreadLibraryの実装では、スレッドが実行を開始するまで、作業項目はスレッドに割り当てられません。そしてスレッドがそれを実行し始めると、誰もそれを目的としないので盗むことはできません。
OtlParallel Unitはこのことについて言及しており、このブログ記事も参照してください。http://www.thedelphigeek.com/2011/01/parallel-for-implementation-1-overview.html – Shambhala
Shamballa、この記事では、ForEach抽象化ではなく、フォーク/結合である。 – gabr
私は非常に残念です、私は質問をより遅く読むべきであり、よく理解していたはずです。 – Shambhala