非プリエンプティブ スレッドについて読んでいて、プリンストン大学のスライドを見つけました。次の図が示されています。 pdf )
私が理解したことから、実行されるスレッドは最初に準備完了キューに入れられます。キューからポップすると、実行中の状態になります。別のスレッドを呼び出したい場合は、yield 関数を呼び出します。これにより、スレッドの現在の状態が保存され、キューの末尾に挿入されます。そして、キューの先頭にあるスレッドが実行されます。
スレッドがブロックされた場合 (つまり、何らかのリソースを待機している場合) はどうなりますか? 非プリエンプティブ スレッドでは、リソースを待機してから実行を続行すると考えました。
しかし、下の図からは、ブロックされた状態になり、準備完了キューに入れられているように見えますか? 何故ですか?