5

私は周りを読んでいて、.Netでスレッドの代わりにタスクを使用すると、スレッドに問題があるコンテキストスイッチの影響を受けないことを読みました。

しかし、周りを読んで、タスクがとにかくカバーの下でスレッドを使用していることにも気づきました。

だから私は少し混乱しています、どんな説明でもありがたいです。

4

2 に答える 2

11

あなたが読んだことは間違っています。

TaskTPLの一部です。TPLは、CLRのスレッドプールよりも高度なスケジューラを使用します。例として、TPLスケジューラーはを使用しWorkStealingQueuesます。

いくつかの事実:

  • Task.Factory.StartNew使用するか、使用するかにかかわらずThreadPool.QueueUserWorkItem、両方が同じスレッドプールを使用します(.NET 4.0)
  • 「生の」スレッドを使用するTaskか「生の」スレッドを使用するかにかかわらず、タイムスライスごとにコンテキストスイッチが発生します。
  • また、優先度の高いスレッドが実行可能になると、コンテキストスイッチが発生します。
  • ATaskは、通常のスレッドと同じ数のコンテキストスイッチを引き起こします。

コンテキストスイッチは、スレッドを同時に処理するのに十分なプロセッサがない場合にのみ発生することに注意してください。

チェックアウトするためのいくつかのリンク:

于 2011-12-05T18:28:54.903 に答える
1

コンテキストスイッチはスレッドに固有のものではなく、スレッドの誤用に固有のものです。タスクは、実行中のスレッドが実行する必要のあるタスクを実行できるようにスレッドを使用し、スレッドが誤用されたときに発生するコストのかかるコンテキストスイッチを回避します。

于 2011-12-04T22:09:17.410 に答える