Поделиться через


Повышение приоритета

Каждый поток имеет динамический приоритет. Это приоритет, который использует планировщик, чтобы определить, какой поток следует выполнить. Изначально динамический приоритет потока совпадает с базовым приоритетом. Система может повысить и понизить динамический приоритет, чтобы гарантировать, что она реагирует и что потоки не голодают в течение времени процессора. Система не повышает приоритет потоков с базовым уровнем приоритета от 16 до 31. Динамические повышения приоритета получают только потоки с базовым приоритетом от 0 до 15.

Система повышает динамический приоритет потока для повышения его отклика следующим образом.

  • При переносе процесса, использующего NORMAL_PRIORITY_CLASS, на передний планировщик увеличивает класс приоритета процесса, связанного с окном переднего плана, чтобы он был больше или равен классу приоритета любых фоновых процессов. Класс приоритета возвращается к исходному параметру, когда процесс больше не находится на переднем плане.

  • Когда окно получает входные данные, такие как сообщения таймера, сообщения мыши или ввод с клавиатуры, планировщик повышает приоритет потока, которому принадлежит окно.

  • При выполнении условий ожидания для заблокированного потока планировщик повышает приоритет потока. Например, когда завершается операция ожидания, связанная с диском или вводом-выводом с клавиатуры, поток получает повышение приоритета.

    Функцию повышения приоритета можно отключить, вызвав функцию SetProcessPriorityBoost или SetThreadPriorityBoost . Чтобы определить, отключена ли эта функция, вызовите функцию GetProcessPriorityBoost или GetThreadPriorityBoost .

После повышения динамического приоритета потока планировщик уменьшает этот приоритет на один уровень каждый раз, когда поток завершает срез времени, пока поток не вернется к базовому приоритету. Динамический приоритет потока никогда не меньше базового приоритета.