Управление приоритетами процессов в Windows
Давайте поговорим о приоритетах Windows процессов. В большинстве случаев «играться» с настройкой приоритетов нет необходимости, но, иногда, грамотный системный администратор может помочь системе более правильно распределить процессорное время между запущенными задачами. Единого рецепта нет, но путем «подбора и перебора» это вполне реализуемо. Где это может понадобиться? Например, в связке 1С-SQL можно дать больше процессорного времени 1С и SQL, как наиболее критичным к ресурсам процессам.
В общем случае, посмотреть и изменить приоритет запущенного процесса можно через Task Manager
Windows NT/2000/7/2008
В Windows 2012 это “закопали» чуть глубже
Как видно из приведенных примеров, вам доступно всего 6 приоритетов (как выяснится позже, это классы приоритетов). Достаточно? Microsoft считает, что да. Но давайте вспомним «легендарную» фразу Билла Гейста, который сказал, что «640 KB of RAM will be enough for everybody”. Но время показало, что это далеко не так. : )
А теперь давайте разберемся, как это есть на самом деле.
На самом деле в Windows существует 32 уровня приоритета, от 0 до 31.
Они группируются так:
- 31 — 16 уровни реального времени;
- 15 — 1 динамические уровни;
- 0 — системный уровень, зарезервированный для потока обнуления страниц (zero-page thread).
При создании процесса, ему назначается один из шести классов приоритетов:
- Real time class (значение 24),
- High class (значение 13),
- Above normal class (значение 10),
- Normal class (значение 8),
- Below normal class (значение 6),
- или Idle class (значение 4).
Посмотреть приоритет процесса, как писалось выше, можно, используя Task Manager.
Приоритет каждого потока (базовый приоритет потока) складывается из приоритета его процесса и относительного приоритета самого потока. Есть семь относительных приоритетов потоков:
- Normal : такой же как и у процесса;
- Above normal : +1 к приоритету процесса;
- Below normal : -1;
- Highest : +2;
- Lowest : -2;
- Time critical : устанавливает базовый приоритет потока для Real time класса в 31, для остальных классов в 15.
- Idle : устанавливает базовый приоритет потока для Real time класса в 16, для остальных классов в 1.
В следующей таблице показаны приоритеты процесса, относительный и базовый приоритеты потока.
Приоритет потока | Класс процесса | Класс процесса | |||||
Idle class | Below normal class | Normal class | Above normal class | High class | Real time class | ||
1 | Idle | Idle | Idle | Idle | Idle | ||
2 | Lowest | ||||||
3 | Below … | ||||||
4 | Idle class | Normal | Lowest | ||||
5 | Above … | Below … | |||||
6 | Below normal class | Highest | Normal | Lowest | |||
7 | Above … | Below … | |||||
8 | Normal class | Highest | Normal | Lowest | |||
9 | Above … | Below … | |||||
10 | Above normal class | Highest | Normal | ||||
11 | Above … | Lowest | |||||
12 | Highest | Below … | |||||
13 | High class | Normal | |||||
14 | Above … | ||||||
15 | Highest | ||||||
15 | Time critical | Time critical | Time critical | Time critical | Time critical | ||
16 | Idle | ||||||
17 | |||||||
18 | |||||||
19 | |||||||
20 | |||||||
21 | |||||||
22 | Lowest | ||||||
23 | Below … | ||||||
24 | Real time class | Normal | |||||
25 | Above … | ||||||
26 | Highest | ||||||
27 | |||||||
28 | |||||||
29 | |||||||
30 | |||||||
31 | Time critical |
Теперь, когда мы все это узнали, что же с этим всем можно сделать? Ну, например, начать использовать.
Как еще можно запустить процесс с «нестандартным» приоритетом или изменить?
Метод 1. Запустить задачу/процесс и изменить приоритет через Task Manager.
- Доступно только 6 приоритетов
- Переключение приоритетов производится мышкой, не автоматизируется.
Метод 2. Можно воспользоваться командой START с соответствующими ключами
Доступные ключи, отвечающие за приоритеты, следующие (я умышленно опускаю ключи командной строки команды START не имеющие отношения к описываемому процессу работы с приоритетами):
C:\>start /?
Starts a separate window to run a specified program or command.
START [«title»] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/NODE ] [/AFFINITY ] [/WAIT] [/B]
[command/program] [parameters]
LOW Start application in the IDLE priority class.
NORMAL Start application in the NORMAL priority class.
HIGH Start application in the HIGH priority class.
REALTIME Start application in the REALTIME priority class.
ABOVENORMAL Start application in the ABOVENORMAL priority class.
BELOWNORMAL Start application in the BELOWNORMAL priority class.
Как видим, команда START дает возможность запустить процесс все с теми же 6-ю приоритетами, которые доступны через Task Manager
- Доступно только 6 приоритетов
Метод 3. Использование утилиты wmic.exe
Как было показано выше, Task Manager, и команда START достаточно неуклюжи для задачи назначения приоритетов. Посмотрим, как это применять более гибко. Будем использовать утилиту wmic.exe.
wmic process where name=»AppName» CALL setpriority ProcessIDLevel
wmic process where name=»calc.exe» CALL setpriority 32768
wmic process where name=»calc.exe» CALL setpriority «above normal»
- idle: 64
- below normal: 16384
- normal: 32
- above normal: 32768
- high priority: 128
- real time: 256
Вот короткий пример запуска wmic.exe для получения необходимой информации
wmic process list brief
Вы получите список процессов, запущенных на вашем локальном компьютере. Теперь выполните команду:
wmic process list brief | find «cmd.exe»
Специально запустил несколько копий cmd.exe, чтобы иллюстрация была более полной.
Теперь список процессов ограничен только теми процессами, в имени исполняемого модуля которых присутствует строка «cmd.exe». Обратите внимание на PID процесса(ов).
Теперь давайте попробуем отобрать интересующие нас процессы, используя непосредственно WMI и не прибегая к стандартным средствам командной строки. Для этого просто напишите:
wmic process where description=’cmd.exe’ list brief
Сравните полученные результаты. Запомните PID процесса CMD.EXE.
Командная строка для запуска wmic.exe
wmic process where processid=’XXXX’ CALL setpriority ProcessIDLevel
Ну а теперь можем изменить приоритет конкретного процесса (например с PID=8476):
wmic process where processid=’8476′ CALL setpriority 32768
wmic process where processid=’8476′ CALL setpriority «above normal»
А что дальше? Прикидывать, пробовать, подбирать и тонко регулировать приоритеты. Улучшая работу сервисов и процессов, а также работу конечных пользователей.
Как поставить высокий приоритет программе в Windows 10
Как и в предыдущих версиях, в Windows 10 можно менять приоритет программ. Это позволяет поставить высокий приоритет для тех программ или приложений, которые выполняют важные для пользователя задачи. Высокий приоритет повышает производительность и отзывчивость программ, программы с более высоким приоритетом быстрее реагируют на действия пользователя, что может быть полезно в играх или при высокой нагрузке на компьютер.
В этом материале мы рассмотрим несколько способов, как можно поставить высокий приоритет для программ, приложений или игр в Windows 10.
Как поставить высокий приоритет через «Диспетчер задач»
Если нужно изменить приоритет уже запущенной программы, то для этого можно воспользоваться « Диспетчером задач ».
Чтобы открыть « Диспетчер задач » можно использовать разные способы. Самый простой и известный вариант – это комбинация клавиш Ctrl-Alt-Del . Также можно кликнуть правой кнопкой мышки по панели задач внизу экрана и выбрать там « Диспетчер задач ».
После открытия « Диспетчера задач » вы попадете на вкладку « Процессы ». Здесь нужно найти программу, приоритет которой нужно повысить, кликнуть по ней правой кнопкой мышки и выбрать пункт « Подробно ».
После этого « Диспетчер задач » перейдет на вкладку « Подробности » и выделит процесс выбранной ранее программы. Здесь нужно кликнуть по процессу правой кнопкой мышки и задать для него приоритет выполнения.
Рекомендуется указывать приоритет « Выше среднего » или « Высокий ». Если выбрать приоритет « Реального времени », то это может привести к зависанию программы или всей системы.
Как запустить программу с высоким приоритетом через командную строку
Для того чтобы запустить программу сразу с высоким приоритетом можно использовать командную строку Windows 10. Для этого понадобится стандартная команда « start », которая позволяет запускать любые другие программы из командной строки.
Так, для запуска программы через командную строку с высоким приоритетом нужно выполнить:
- /high – это указание на приоритет программы. Также можно использовать:
- /low
- /normal
- /high
- /realtime
- /abovenormal
- /belownormal
- program – это программа, которую нужно запустить с данным приоритетом.
Например, для того чтобы запустить редактор Paint с высоким приоритетом нужно выполнить:
После запуска программы можно перейти найти ее в « Диспетчер задач » и проверить ее приоритет. В данной случае все правильно, параметр /high привел к запуску с высоким приоритетом.
Если таким образом не получается запустить нужную вам программу, то попробуйте сначала перейти в папку с программой и уже потом выполнять команду « start ».
Также с помощью параметра « /D » путь к программе можно указать прямо в команде « start ». В этом случае команда будет выглядеть так:
Например, для того чтобы запустить программу « akelpad », которая находится в папке « C:\Program Files (x86)\AkelPad » нужно выполнить следующую команду:
Используя данные команды можно создать командный BAT-файл для быстрого запуска программ с высоким приоритетом. Больше информации о команде « start » можно получить на сайте Майкрософт.
Как настроить запуск программы с высоким приоритетом через реестр
Также Windows 10 позволяет настроить приоритет выполнения программ через реестр. В этом случае при каждом запуске указанной программы ей автоматически будет задаваться нужный приоритет.
Чтобы воспользоваться этим способом нужно запустить редактор реестра Windows 10. Это можно сделать, например, при помощи комбинации клавиш Win-R и команды « regedit ».
В редакторе реестра нужно открыть указанный ниже раздел.
В данном разделе нужно создать новый вложенный раздел и назвать его так, как называется exe-файл нужной вам программы.
Например, для того чтобы с высоким приоритетом запускалась программа « Akelpad », созданный раздел должен называться « akelpad.exe ». В вашем случае это может быть « chrome.exe », « hl.exe » и т. д.
В новом разделе создаем еще один вложенный раздел с названием « PerfOptions ».
А в разделе « PerfOptions » создаем параметр « DWORD 32 бита » с названием « CpuPriorityClass ».
Дальше открываем параметр « CpuPriorityClass », выбираем десятичную систему исчисления и присваиваем ему значение 3 (высокий приоритет).
Для данного параметра можно использовать следующие значения приоритета:
- 1 — низкий;
- 5 — ниже среднего;
- 8 — обычный;
- 6 — выше среднего;
- 3 — высокий;