2010-12-29 4 views
1

は、これらのものは、どのように相関するか、私まで明らかに誰かでした:TPLタスク、スレッドなど

タスク
スレッド
のThreadPoolのスレッド
Paraller.For /のForEach/

すなわちを起動しますタスクを作成して実行すると、実行するスレッドはどこにありますか?そして私がParallelと呼ぶと、実際には何が起こっているのですか?

記事、ブログ記事などへのリンクも大歓迎です!

+0

優れた本、Windowsでの並行プログラミング、良い読書、少なくとも私がこれまでにやったことの半分;-) –

答えて

1

システムの理想的な状態は、CPUコアごとに1つのスレッドをアクティブに実行することです。タスクをより一般的な用語で定義することによって、TPLは、理想状態を達成するのに最も近い状態になるために、使用するスレッドの数とそれぞれのタスクを動的に決定できます。これらの決定は、実行時に動的に最適化されることがほとんどです。なぜなら、コードを書くときに、アプリケーションに使用できるCPUコアの数、他の作業の忙しさなどがわからないからです。

0

スレッド:は、実際のOSスレッドで、ハンドルとIDを持っています。

ThreadPool:は既に作成されたOSスレッドの集合です。これらのスレッドはランタイムによって所有/維持され、あなたのコードはそれらをしばらく「借りる」ことしか許されません。これらのスレッドでは短期間の作業しかできず、スレッドの状態を変更することも、削除することもできませんこれらのスレッド。これら二つの

ベストの推測:

タスク:は、スレッドプールで事前に作成されたスレッド上で実行される可能性があります、またはユーザーモードスケジューリングの一部として実行される可能性があります、これはすべてのものに応じてありますランタイムは最高だと思っています。別の推測:TPLでは、ユーザモードのスケジューリングはOS Fibresに基づいているのではなく、独自の完全な実装です。

Parallel.For:実際には、これがどのように実装されているかわかりません。ランタイムは、並列ビットを実行するための新しいスレッドを作成するか、スレッドプールのスレッドを並列処理に使用する可能性が非常に高くなります。

関連する問題