2012-03-07 11 views
1

私はいくつかのスレッド(それぞれがそのキューで動作している)と並列タスク(Parallel.Forまたは単にThread.StartNew)でアプリケーションを開発しています。Threading.ThreadとThreading.Task同じアプリケーションで、タスクはそれを考慮に入れますか?

スレッドの最後のバージョン(スレッドプール、タスクなど)で導入されたMSスレッドコンポーネントが、新しいスレッドで操作を実行したときに手動で定義した他のスレッドを認識していますか?

例えば、私は4つのcpuと1つのスレッド(スレッドは常に動作しないスレッド、リセットイベントなどを使用する)を持つPCを持っています。他のタスクがタスク(タスク)を完了するのを待っている間に、3つのタスクが自分のアプリケーションと共に実行されることを意味しますか?スレッドがスリープ状態になるとどうなりますか(スレッドが実行しているCPU上でタスク操作が実行されますか?そうであれば、スレッドがimmidiatlyで実行する必要があり、CPU時間を要したタスクがハングアップします?それは私のスレッドが文句を言わないにも実行することを意味し、またはいくつかの点で私は、コンテキストスイッチが表示されます?)

たくさんのとたくさんの質問の...誰かが我慢して、私に答えを持っていることを願っています:)

おかげで、 Tzahi

答えて

1

はThreadPoolの/ TPLインフラが「手動」で作成されたスレッドについての手掛かりを持っていない、それだけで使用可能なCPUリソースを使用するようにチューニング自体に最善を尽くします。そこから、オペレーティングシステムに依存して仕事をし、お互いにスレッドをスケジュールします。たとえば、手動スレッドがオブジェクトを待ってブロックされている場合、リソースを消費せず、OSは別の利用可能なスレッド(おそらくThreadPool/TPLから)を実行するようにスケジューリングします。あなたがそれについて考えるならば、これは実際にはOS上で動作する複数のアプリケーションと同じです。彼らはお互いについては何も知りませんが、OSは誰もが幸せになり、利用可能なリソースを分け合うために最善を尽くします。

関連する問題