Переключения контекста
Планировщик поддерживает очередь исполняемых потоков для каждого уровня приоритета. Они называются готовыми потоками. Когда процессор становится доступным, система выполняет переключение контекста. В переключении контекста выполняются следующие действия.
- Сохраните контекст потока, который только что завершил выполнение.
- Поместите поток, который только что завершил выполнение, в конец очереди для его приоритета.
- Найдите очередь с наивысшим приоритетом, содержащую готовые потоки.
- Удалите поток в начале очереди, загрузите его контекст и выполните его.
Следующие классы потоков не являются готовыми потоками.
- Потоки, созданные с флагом CREATE_SUSPENDED
- Потоки, остановленные во время выполнения с помощью функции SuspendThread или SwitchToThread
- Потоки, ожидающие объекта синхронизации или входных данных.
Пока приостановленные или заблокированные потоки не будут готовы к запуску, планировщик не выделяет им время процессора, независимо от их приоритета.
Наиболее распространенные причины переключения контекста:
- Срез времени истек.
- Поток с более высоким приоритетом готов к выполнению.
- Выполняющийся поток должен ждать.
Когда выполняющийся поток должен ждать, он откажется от оставшейся части своего среза времени.