web-dev-qa-db-ja.com

スレッドはLinuxとWindowsを述べています

Linuxには、準備完了、ブロック済み、実行中、終了済みがあります。

Windowsには、準備完了、遅延準備完了、スタンバイ、実行中、待機中、終了済み、初期化済みがあります。

なぜWindowsにはこれほど多くの状態があるのですか?この余分な複雑さはどのような利点をもたらしますか?

2
Nickolouse

Runningスレッドは、現在プロセッサで実行されているスレッドです。 Runningスレッドは、そのプロセッサのReadyスレッドのリストから選択されます、実行するためにスワップインするのに適したスレッドです。 StandbyスレッドはReadyスレッドであり、currentlyは、そのプロセッサで次にRunning状態にスワップインするように選択されています。ただし、変更が行われる前に優先度の高いスレッドの準備ができた場合、これは変更される可能性があります。

Deferred Readyは、スレッドがanyプロセッサで実行する準備ができていることを示すグローバル状態です。これは、たとえば、あるCPUで、別のCPUで優先度の高いスレッドをスケジュールするために使用できます。

実行する準備ができていないスレッドには、実行できない理由によって決定される状態が与えられます。

  • スレッドは、作成中にInitialized状態になります。
  • スレッドは、同期やI/O完了などのイベントで待機中になるか、ディスクにページングされたメモリにアクセスした場合に強制的に待機させることができます。 、 例えば。イベントが通知されるか、タイムアウトが経過すると、スレッドは再度実行できるようになります。
  • スレッドは、カーネルスタックがページアウトされているため、Transition状態になります。これらのスレッドは、カーネルスタックが再び使用可能になるまで実行する準備ができていません。
  • 終了したスレッドは、システムがクリーンアップされるまで終了状態になります。

enter image description here

スレッドの状態は、実行するスレッドが選択される順序を決定するスケジューリングの優先順位とは完全に分離されていることに注意してください。

4
Xtremity