В Windows реализована вытесняющая многозадачность,
при которой операционная система не ждет,
когда нить сама захочет освободить процессор,
а принудительно снимает ее с выполнения после того,
как та израсходовала отведенный ей квант времени,
или если в очереди готовых
появилась нить с более высоким приоритетом.
При такой организации разделения процессора
ни одна нить не займет процессор на очень долгое время.
В операционной системе Windows нить
в ходе своего существования может иметь
одно из шести состояний, как представлено на рисунке.
Жизненный цикл нити начинается в момент,
когда программа создает новую нить.
Запрос передается команду на выполнение,
менеджер процессов выделяет память для объекта-нити
и обращается к ядру,
чтобы инициализировать объект ядра нитиь.
После инициализации нить проходит через следующие состояния.
Готовность. При поиске нити на выполнение
диспетчер просматривает только нити,
находящиеся в этом состоянии,
у которых есть все для выполнения,
но не хватает только процессора.
Первоочередная готовность. Для каждого процессора
системы выбирается одна нить,
которая будет выполняться следующей
(самая первая нить в очереди).
Когда условия позволяют, происходит переключение
на контекст этой нити.
Выполнение.
Как только происходит переключение контекстов,
нить переходит в состояние выполнения
и находится в нем до тех пор, пока
либо ядро не вытеснит ее из этого состояния,
когда появится более приоритетная нить,
или закончился квант времени, выделенный этой нити,
либо нить завершится вообще
по собственной инициативе перейдет в состояние ожидания.
Состояние ожидание.
Нить может входить в состояние ожидания
несколькими способами: нить по своей инициативе
ожидает некоторый объект
для того, чтобы синхронизировать свое выполнение;
операционная система (например,
подсистема ввода-вывода)
может ожидать в интересах нити;
подсистема окружения может непосредственно
заставить нить приостановить себя.
Когда ожидание нити подойдет к концу,
она возвращается в состояние готовности.