Управление приоритетами процессов в ОС Windows Vista и Windows 7
-
+152
+
Приоритет процесса
Наверняка, практически все знают что такое приоритет процесса, если же нет, постараюсь кратко объяснить.Это понятие, в определенном смысле, равно как для Windows, так и для Linux, а так же для некоторых других операционных систем.
Сейчас речь пойдет об операционных системах Windows Vista и Windows 7.
Windows Vista и Wnidows 7, впрочем, как и предыдущие версии, системы мультизадачные, т.е. могут выполнять параллельно множество программ, причем, еще и мультипоточные, но это уже отклонение, точнее, ненужное углубление в тему.
Каждая программа, запущенная в Windows, представляет из себя процесс или несколько процессов.
Под каждый процесс, при его запуске, в системе выделяется память, а так же устанавливается приоритет по умолчанию, если только в самой программе нет упоминания о приоритете, с которым необходимо её запускать.
Чем выше приоритет процесса, тем больше ему выделяется процессорного времени, чем ниже приоритет, тем меньше процессу выделяется процессорного времени.
Или если простым языком — чем выше приоритет, тем чаще и больше процессор «уделяет внимание» процессу и его операциям, а чем ниже приоритет, тем меньше «уделяет внимание».
Соответственно это сказывается на скорости выполнение той или иной программы.
Практическая польза от изменения приоритета процесса
В Windows 7 меня изначально удивлял тот факт, что по-сути чисто декоративным процессам, вроде sidebar.exe (гаджеты на рабочий стол) уделяется процессорного времени ровно столько же, как и остальным процессам.При этом sidebar.exe сам по себе не выполняет каких-то сверх важных и сверх нужных функций. Так зачем же ему уделять столько же процессорного времени, как, например, тяжелому ресурсоёмкому приложению, вроде 3D-игры или 3D-редактора с большой сценой?
Исходя из этого вопроса я и начал, что называется, играть с приоритетами процессов.
Главное что я понял, выше приоритета Normal (Средний) пользовательским программам лучше не подниматься, ибо тогда Windows Vista/7 может начать некорректно распределять процессорное время и некоторые важные системные процессы начнут «подтормаживать».
На самый крайний случай, нужному вам пользовательскому процессу можно выставить приоритет AboveNormal (Выше среднего), но это в очень редких случаях добавляет ощутимую разницу в производительности программе.
Но при этом никто не запрещает снизить приоритет другим, мало или не столь важным процессам, дабы они не отъедали ценное процессорное время, например, у игры.
Часто такие манипуляции действительно позволяют выиграть 5-10FPS.
Автоматический запуск процесса с определенным приоритетом
Недостаток, который известен многим — при изменении приоритета через «Диспетчер задач», он сохраняется лишь до завершения процесса, потом же процесс вновь запускается с приоритетом по-умолчанию. Т.е. ваши настройки приоритетов не запоминаются.Из-за этого в интернете появилось множество программ, которые запоминают ваш выбор приоритета, а при следующем запуске программы, меняют его за вас автоматически.
Я же изначально не поверил в то, что в Windows нет какого-нибудь инструмента для управления и запоминания приоритета процесса и начал рыть документацию на сайтах Microsoft.
Не буду разводить полемику на тему плохой документированности возможностей Windows, но я оказался прав.
Любому процессу в Windows можно вручную через реестр указать приоритет и еще некоторые свойства, с которыми он будет запускаться.
Путь к разделу реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
Как запустить редактор реестра?
Нажмите сочетание клавиш Win+R (быстрый вызов команды «выполнить»), в появившемся окошке, в текстовой строке наберите regedit и нажмите Enter =)
Для того, что бы указать приоритет для процесса, с которым он должен сразу всегда запускаться, вам нужно в указанной выше ветке реестра создать раздел с его именем.
Далее в нем создать еще один раздел, т.е. уже подраздел с названием PerfOptions, а уже в нем создать параметр DWORD (32бита) с названием CpuPriorityClass и задать ему одно из десятичных значений — 1, 2, 3, 5, 6.
1 — приоритет Idle (низкий);
2 — приоритет Normal (средний);
3 — приоритет High (высокий);
5 — приоритет BelowNormal (ниже среднего);
6 — приоритет AboveNormal (выше среднего);
Разберем на примере sidebar.exe.
В ветке ресстра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options я создаю раздел sidebar.exe.
В нем создаю подраздел PerfOptions. И в этом подразделе создаю параметр DWORD (32бита) с названием CpuPriorityClass c десятичным значением 1.

Таким образом sidebar.exe теперь у меня всегда будет запускаться с низким приоритетом (Idle).
Так же все вышеописанные операции можно делать и через командную строку (cmd).
Я написал небольшой универсальный пакетный файл, который все это делает за пользователя.
Ссылка на пакетный файл: save_process_priority.cmd
В пакетном файле все пункты расписаны на русском языке. От пользователя потребуется только вводить нужное ему имя процесса и выбирать приоритет.
Для того что бы ваши настройки приоритета вступили в силу, необходимо перезапустить процесс. Если же вы внесли сразу несколько системных процессов, перезагрузите систему, так будет проще.
Это необходимо потому, что данные с реестра считываются только при загрузке и запуске программ, но не при их работе.
Вот и все, спасибо за внимание =)
Если заметили ошибку, обязательно сообщите, буду очень благодарен.
Copyright © 2011 Tsiryuta G. N. <spbtgn@gmail.com>
Смотрите еще
Комментарии (25)
В смысле что большинство это или не знает или просто не юзает, а меж тем штука очень полезная. Например, групповые приоритеты, позволяют замедлить всю систему ради, скажем, мощного рендера в VRay
Материал ничего, даж плюсану, но вот один момент поставил меня в тупик:
Это для каких, кроме макоси (каковую можно смело отнести к линухам)?
а так же для некоторых других операционных систем.
Это для каких, кроме макоси (каковую можно смело отнести к линухам)?
Ну MacOS скорее нужно относить к FreeBSD, да и то в MacOS от FreeBSD осталась только командная оболочка, все остальное уже давно переписано, а так систем и семейств много: Windows, Linux, FreeBSD, Solaris, а также великое множество Unix based и Unix like систем. =)
Prio — Process Priority Saver программа позволяющая сохранить приоритет любого процесса. Бесплатная.
Кроме этого она проверяет цифровые подписи процессов и отображает результаты в диспетчере задач.
Кроме этого она проверяет цифровые подписи процессов и отображает результаты в диспетчере задач.

Да, я в курсе подобных программ, упоминал об этом в статье.
Но все же у меня есть элемент «паранойи» — нет желания ставить стороннюю программу, от неизвестного мне автора, которая будет что-то там мониторить или делать без моего ведома =)
Приоритеты для процессов можно сохранять либо вручную, либо с помощью написанного мною пакетного файла, т.е. стандартными средствами WIndows.
Тем более пакетный файл может открыть любой человек с помощью блокнот или любого другого текстового редактора, и прочитать что он делает, удостоверится в его безопасности.
А вообще это дело вкуса. Просто я, как любитель консоли в Linux, завел привычку все делать сам, а не с помощью каких-то сторонних решений =)
Но все же у меня есть элемент «паранойи» — нет желания ставить стороннюю программу, от неизвестного мне автора, которая будет что-то там мониторить или делать без моего ведома =)
Приоритеты для процессов можно сохранять либо вручную, либо с помощью написанного мною пакетного файла, т.е. стандартными средствами WIndows.
Тем более пакетный файл может открыть любой человек с помощью блокнот или любого другого текстового редактора, и прочитать что он делает, удостоверится в его безопасности.
А вообще это дело вкуса. Просто я, как любитель консоли в Linux, завел привычку все делать сам, а не с помощью каких-то сторонних решений =)
так-то неплохо сделано и информативно, но…
Нет. Нет! Скажите что он шутит! ПОЖАЛУЙСТА!
Windows Vista
Нет. Нет! Скажите что он шутит! ПОЖАЛУЙСТА!

Нет. Нет! Скажите что он шутит! ПОЖАЛУЙСТА!
Windows Vista упомянул потому что 7-ка построена на переработанном ядре Windows Vista, соответственно многие команды и скрипты, или же элементы реестра, вызывающие команды ядра одинаковые.
Сам же я тоже не любитель Windows Vista, хотя и знаю что после 2-х сервис паков система стала вполне работоспособная.
Хотя все же то, что было заложено в ядро 7-ки, при её написании, в Vista просто нет и уже по этому она мне меньше нравится, точнее просто не нравится =)
безпонтовая херня если у тебя 4 ядра а вот для одно-ядерных и некоторых других двух-ядерных норм)
Хотелось бы услышать(точнее прочитать), какими системными процессами можно пренебречь и поставить на них низкий приоритет.
В Winodws 7 можно тоже sidebar.exe осадить до низкого приоритета.
А вообще тут уже надо сами думать.
Я, например, uTorrent.exe тоже установил приоритет «Ниже среднего», дабы он не так жрал процессорное время, при загрузке и раздаче множества файлов.
Так же skype.exe тоже снизил приоритет до «Ниже среднего», от этого он никак не пострадает, зато меньше будет нагружать систему.
Так же я процессам Steam снизил приоритет до «Ниже среднего», что бы они не отъедали производительность у тяжелых игр. Кстати, таким образом у меня в нескольких тяжелых играх, действительно вырос средний FPS и меньше «просадок» кадров стало.
Например GameOverlayUI.exe — процесс оверлея Steam, хорошо так есть процессорное время, если открыт голосовой чат через Steam параллельно с игрой.
А вообще тут уже надо сами думать.
Я, например, uTorrent.exe тоже установил приоритет «Ниже среднего», дабы он не так жрал процессорное время, при загрузке и раздаче множества файлов.
Так же skype.exe тоже снизил приоритет до «Ниже среднего», от этого он никак не пострадает, зато меньше будет нагружать систему.
Так же я процессам Steam снизил приоритет до «Ниже среднего», что бы они не отъедали производительность у тяжелых игр. Кстати, таким образом у меня в нескольких тяжелых играх, действительно вырос средний FPS и меньше «просадок» кадров стало.
Например GameOverlayUI.exe — процесс оверлея Steam, хорошо так есть процессорное время, если открыт голосовой чат через Steam параллельно с игрой.
Как и обещал ранее, написал небольшой пакетный файл, который все операции, описанные в статье, делает за пользователя.
От пользователя потребуется только ввести название процесса и выбрать приоритет.
Ссылку добавил в статью.
От пользователя потребуется только ввести название процесса и выбрать приоритет.
Ссылку добавил в статью.
Исходный текст выложил, но редактор сообщения в блогах автоматически вытер пробелы у рамок, потому их вручную придется восстанавливать.
Такс, похоже этот редактор сообщений автоматом еще заменил кавычки "" на «». В общем лучше пока скачивать готовый файл, проблем меньше.
Пробовал, еще когда добавлял исходный код. От него еще хуже.
При использовании вообще вытерлись все переносы строк и часть пробелов тоже, чего не должно быть в принципе при использовании подобного тега. Ибо его суть как раз в том, что бы сохранять кусок текста символ в символ.
Причем на других форумах и движках подобный тег корректно все отображает, а здесь, в блогах, явно забыли прописать пару css параметров, дабы текст не подвергался изменению.
При использовании вообще вытерлись все переносы строк и часть пробелов тоже, чего не должно быть в принципе при использовании подобного тега. Ибо его суть как раз в том, что бы сохранять кусок текста символ в символ.
Причем на других форумах и движках подобный тег корректно все отображает, а здесь, в блогах, явно забыли прописать пару css параметров, дабы текст не подвергался изменению.
создаю параметр DWORD (32бита)
А почему именно 32 бита??? А если система и процесс 64 битный? То есть, от чего это зависит от процесса который мы меняем, или…
Разрядность системы и процесса значения не имеют, просто сама система подхватывает параметр только из DWORD — 32-битного числа. А 64-битное число уже имеет другой тип — QWORD. На него система просто внимание не будет обращать, в лучшем случае, а, в худшем, вообще начнет ругаться =)
DWORD — это 32-битное целое число (без знака) (диапазон: от 0 и до 4294967295 в десятичной системе).
DWORD — это 32-битное целое число (без знака) (диапазон: от 0 и до 4294967295 в десятичной системе).
CpuPriorityClass правой кнопкой; изменить: значение — 1, система исчисления — десятичная; ок.
НО когда снова открываем его значение, система исчисления стоит опять х16. Так и должно быть, т.е. просто флажок перемещается туда при каждом открытии, или что-то не так?
НО когда снова открываем его значение, система исчисления стоит опять х16. Так и должно быть, т.е. просто флажок перемещается туда при каждом открытии, или что-то не так?
Проверил, набрал 10, а не 1. Выдает в значениях не «10», а «а», то есть сразу сохраняет в х16.
Да, сохраняется всегда в шестнадцатеричной системе счисления, просто для удобства пользователя есть возможность ввести в десятичной системе.
Вести 12, вместо С намного легче. Запоминать не надо.
Хотя можно воспользоваться следующей инфой, которая облегчит восприятие 16ричной системы.
А = 1+0
B = 1+1
С = 1+2
D = 1+3
E = 1+4
F = 1+5
Хотя можно воспользоваться следующей инфой, которая облегчит восприятие 16ричной системы.
А = 1+0
B = 1+1
С = 1+2
D = 1+3
E = 1+4
F = 1+5
Все куда проще =)
В десятичной системе отсчет от 0 до 9, т.е. только один знак.
В шестнадцатеричной тоже всегда один знак, но после 9 идет отсчет буквами, а не цифрами.
Т.е. с 0 до 9 все также, как и в десятичной, а потом A — это 10, B — это 11, C — это 12, D — это 13, E — это 14, F — это 15.
В десятичной системе отсчет от 0 до 9, т.е. только один знак.
В шестнадцатеричной тоже всегда один знак, но после 9 идет отсчет буквами, а не цифрами.
Т.е. с 0 до 9 все также, как и в десятичной, а потом A — это 10, B — это 11, C — это 12, D — это 13, E — это 14, F — это 15.
Дак я понимаю, как ведется отсчет в 16х системе и как на неё переносятся числа из десятичной. Говорил о том, что тут диапазон лишь до восьми, то есть нет разницы, как вводить. Немного не так меня поняли. (:
Прочитал статью, весьма познавательно… давно искал, только у меня вопрос можно ли так же через реестр задать соответствие или как в восьмерке написано сходство процессоров? сам пробовал искать не нашел