Класс приоритета


Каждый процесс принадлежит одному из нижеследующих классов приоритета:

IDLE_PRIORITY_CLASS

BELOW_NORMAL_PRIORITY_CLASS

NORMAL_PRIORITY_CLASS

ABOVE_NORMAL_PRIORITY_CLASS

HIGH_PRIORITY_CLASS

REALTIME_PRIORITY_CLASS

В Windows NT 4.0 и ранее: BELOW_NORMAL_PRIORITY_CLASS и ABOVE_NORMAL_PRIORITY_CLASS не поддерживаются.

По умолчанию, классом приоритета процесса является NORMAL_PRIORITY_CLASS. Используйте функцию CreateProcess, чтобы установить класс приоритета дочернего процесса, когда он создается. Если вызывающий процесс имеет приоритет IDLE_PRIORITY_CLASS или BELOW_NORMAL_PRIORITY_CLASS, новый процесс наследует этот класс. Используйте GetPriorityClass, чтобы определить текущий класс приоритета процесса и SetPriorityClass, чтобы изменить класс приоритета процесса.

Процессы, которые отслеживает система, типа программ-заставок (хранителей экрана) или прикладных программ, которые периодически обновляют вывод данных на экране, должны использовать IDLE_PRIORITY_CLASS. Он не допускает, чтобы потоки этого процесса, которые не имеют высокого приоритета, сталкивались с потоками более высоких приоритетов.

С осторожностью используйте HIGH_PRIORITY_CLASS. Если поток запускается с самым высоким уровнем приоритета на длительный период, другие потоки в системе не будут получать процессорного времени. Если для нескольких потоков одновременно установлен высокий приоритет, потоки теряют свою производительность. Высокоприоритетный класс должен быть зарезервирован для потоков, которые должны отвечать на критические по времени события. Если ваша прикладная программа выполняет одну задачу, которая требует высокоприоритетного класса, в то время как остальная часть ее задач требует нормальный приоритет, используйте функцию SetPriorityClass, чтобы временно поднять класс приоритета приложения; затем, уменьшите его, после того как критическая по времени задача будет завершена. Другая стратегия заключается в том, чтобы создать высокоприоритетный процесс, который большую часть времени держит все потоки заблокированными, потоки пробуждаются только тогда, когда они необходимы критическим задачам. Важным пунктом является то, что высокоприоритетный поток должен выполниться в течение краткого времени, и только тогда, когда он имеет критическую по времени работу, которую надо выполнить.

Вы не должны почти никогда использовать REALTIME_PRIORITY_CLASS, потому что он прерывает системные потоки, которые управляют вводом информации от мыши, вводом информации с клавиатуры, и фоновым сбрасыванием на диск. Этот класс может быть подходящим для прикладных программ, которые "говорят" непосредственно с аппаратными средствами или для программ, выполняющих короткие задачи, прерывания которых должны быть ограничены.

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz