Прежде всего, обратите внимание, что многие детали того, как потоки реализованы и запланированы, очень зависят от ОС. В общем, вам не нужно беспокоиться о потоках, ожидающих друг друга, так как ОС и оборудование будут пытаться организовать их эффективную работу, будь то асинхронно в однопроцессорной системе или параллельно на многопроцессорных. 1001 *
Как только поток завершает ожидание чего-либо, скажем, ввода / вывода, его можно считать работоспособным. Работающие потоки будут запланированы для выполнения в какой-то момент в ближайшее время. Реализовано ли это как простая очередь или что-то более сложное, опять же, зависит от операционной системы и оборудования. Вы можете рассматривать набор заблокированных потоков как набор, а не как строго упорядоченную очередь.
Обратите внимание, что в однопроцессорной системе асинхронные программы, как определено здесь, эквивалентны многопоточным программам.