Переключения контекста

Планировщик поддерживает очередь исполняемых потоков для каждого уровня приоритета. Они называются готовыми потоками. Когда процессор становится доступным, система выполняет переключение контекста. В переключении контекста выполняются следующие действия.

  1. Сохраните контекст потока, который только что завершил выполнение.
  2. Поместите поток, который только что завершил выполнение, в конец очереди для его приоритета.
  3. Найдите очередь с наивысшим приоритетом, содержащую готовые потоки.
  4. Удалите поток в начале очереди, загрузите его контекст и выполните его.

Следующие классы потоков не являются готовыми потоками.

  • Потоки, созданные с флагом CREATE_SUSPENDED
  • Потоки, остановленные во время выполнения с помощью функции SuspendThread или SwitchToThread
  • Потоки, ожидающие объекта синхронизации или входных данных.

Пока приостановленные или заблокированные потоки не будут готовы к запуску, планировщик не выделяет им время процессора, независимо от их приоритета.

Наиболее распространенные причины переключения контекста:

  • Срез времени истек.
  • Поток с более высоким приоритетом готов к выполнению.
  • Выполняющийся поток должен ждать.

Когда выполняющийся поток должен ждать, он откажется от оставшейся части своего среза времени.