IO を待機しているスレッドもコアをブロックしますか? 質問する

IO を待機しているスレッドもコアをブロックしますか? 質問する

同期/ブロッキング計算モデルでは、通常、実行スレッドは待機する(待機する)と言います。ブロックされた) IO タスクが完了するのを待機します。

私の質問は、これによって通常、スレッドを実行している CPU コアがアイドル状態になるのか、それとも、IO を待機しているスレッドは通常、コンテキストが切り替えられ、IO が処理される準備ができるまで待機状態になるのか、ということです。

ベストアンサー1

CPU コアは通常、特定の実行スレッド専用ではありません。カーネルは、CPU で実行されるプロセスを常に切り替えています。CPU によって現在実行されているプロセスは、「実行中」状態です。順番を待っているプロセスのリストは、「準備完了」状態です。カーネルは、これらのプロセスを非常に迅速に切り替えます。最新の CPU 機能 (複数のコア、同時マルチスレッドなど) は、物理的に一度に実行できる実行スレッドの数を増やそうとします。

プロセスが I/O ブロックされている場合、カーネルはそれを単に脇に置いて (「待機」状態にして)、CPU で時間を与えることさえ考慮しません。I/O が終了すると、カーネルはブロックされたプロセスを「待機」状態から「準備完了」状態に移行し、CPU で順番が回ってくる (「実行」する) ようにします。

したがって、ブロックされた実行スレッドは、実行スレッドのみをブロックします。CPU と CPU コアは、他の実行スレッドの切り替えを継続し、アイドル状態になりません。

おすすめ記事