3

いくつかのブロッキング IO を実行し、それが完了するのを待っている C# スレッドがあるとします。これで、OS スケジューラによって CPU 時間が割り当てられます。すぐに返されますか、それともスレッドが何もせずに使用されますか? それとも、まったく別のものですか?

4

1 に答える 1

6

Windows では、任意のデバイス (ファイル システム インターフェイスなどを介してアクセス可能) への IO のブロックは、デバイスに関連付けられたドライバーに IO 要求をイベント オブジェクトへのハンドルと共に送信することによって機能し、それを待機することによって呼び出し元のスレッドをブロックします。イベントオブジェクト。(ドライバーが IO を完了すると、イベントが通知されます)。したがって、スレッドがブロック IO を行う場合、イベント ハンドルを待機しているだけなので、CPU を占有しません。

すべてのブロッキング IO API はこの方法で動作しますが、実装にはおそらく微妙な違いがあります。

于 2012-11-28T11:27:27.100 に答える