2010-12-26 20 views
12

私は現在Task Parallel Libraryを研究中で、TPLが実際にCLRレベルのスレッドプールメカニズムを使用しているところを読んでいます。この情報を確認する記事は見つかりませんでした。 TPLにはスレッドごとにタスクキューがあり、バランスを取るための特別なワークスティールアルゴリズムが使用されています。私が知る限り、それは各プロセッサ用に1つのスレッドを作成します。スレッドプールは.NET 4以降、TPLのタスクオブジェクトを使用し始めました。(どのように)TPLは(CLR)スレッドプールを使用しますか?

TPLがスレッドプールをどのように使用するのか理解できません。スレッドプールパターンの状態では、作業項目はキューに入れられ、スレッドプール内の空きスレッドはこのキューから1つ取り出されます。しかし、TPLはスレッドの待ち行列に項目(タスク)を格納し、必要に応じて作業を盗む作業をします...したがって、全く異なっています。私のミスはどこですか?

追加質問:これは私の最初のスタックオーバーフローに関する質問だったので、それが適切かどうかはわかりません。それは...ですか?

+1

(ちなみに、それはまさにSOの質問です。) –

答えて

9

TPLでは、TaskSchedulerは実際に実行のためにタスクをキューイングします。 Defaultスケジューラはスレッドプールを使用しますが、私はそれが実際に巧みな作業を行う新しいスレッドプールの実装だと信じています。

ダニエル・モスにはblog postがありますが、それはあなたの役に立つかもしれません。

+1

この記事はとても役に立ちます。ありがとうございます。私は混乱の理由を理解しています:タスクロジックと作業盗みは、実際にはTPLの一部として設計されました。しかし、実装はスレッドプールにあります。この進化したスレッドプールは、「仕事の盗むプール」に発展しました。再度、感謝します。 – eks

関連する問題