2012-07-06 6 views
5

ワークスチールは、たとえば、JavaプラットフォームのFork/Joinフレームワークで利用できます。 (How is the fork/join framework better than a thread pool?を参照) - OmniThreadLibraryと同様の可能性がありますか?盗みOmnithreadLibraryは "仕事を盗む"をサポートしていますか?


仕事:やるべき事を使い果たしワーカースレッドがまだ忙しいです他の スレッドからタスクを盗むことができます。

+0

OtlParallel Unitはこのことについて言及しており、このブログ記事も参照してください。http://www.thedelphigeek.com/2011/01/parallel-for-implementation-1-overview.html – Shambhala

+0

Shamballa、この記事では、ForEach抽象化ではなく、フォーク/結合である。 – gabr

+1

私は非常に残念です、私は質問をより遅く読むべきであり、よく理解していたはずです。 – Shambhala

答えて

6

私はこのテクニックを "仕事盗む"と呼んでもわかりませんが、OmniThreadLibraryは実際にはフォーク/結合抽象化を実行するときにすべてのコアをビジー状態に保ちます。

フォーク/結合を使用すると、Computeを呼び出して計算プールにタスクを送信します。サブコンピュータの結果を得るためにValueを呼び出すか、またはAwaitがサブコンピュータの終了を待機し、サブコンピュータがまだ完了していない場合、Value/Awaitは計算プールから別のタスクを実行します。この新しいタスクが終了すると、サブコンピュータがその作業を完了したかどうかが再びチェックされ、そうでなければ次のサブタスクが処理されます。

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


EDIT

私はフォークを考えていない/ "仕事は盗む" と呼ばれるべきアプローチに参加しましょう。 OmniThreadLibraryの実装では、スレッドが実行を開始するまで、作業項目はスレッドに割り当てられません。そしてスレッドがそれを実行し始めると、誰もそれを目的としないので盗むことはできません。

関連する問題