Что значит высокий приоритет

Что значит высокий приоритет

Введение

По определению, Windows является многозадачной операционной системой. То есть одновременно в ней могут выполняться несколько задач. Однако задача задаче рознь. И различие это заключается в приоритете. То есть, при выполнении какой-либо программы Windows распределяет ресурсы определенным образом, в зависимости от того, какой приоритет у какого процесса (программы). Программы в дальнейшем я буду называть процессами, так проще. Каждая запущенная программа в Windows представляет собой процесс. Приоритеты бывают разные — большие, маленькие, но об этом потом. Чем это может нам помочь? А вот чем. Многие сетуют на медленность выполнения программ на Vb. В свое время я на это наткнулся на самом наглядном примере. Представьте себе программу, которая должна через определенный интервал времени выполнять какое-либо действие — ну, например, что-то выводить пользователю. Просто — скажете Вы. Берем таймер и вперед. А если помимо этого периодически программа должна что-то еще считать, и не один раз, а таймеров много? Будет тормозить. Причем не Windows, а только программа. Несправедливо? Да. Это значит, что Windows отделяет мало ресурсов Вашей программе, которых ей явно недостаточно. Значит попросить у Windows больше, только как?

Вот так

Значит надо менять приоритет. Самое время о них поговорить. В Windows’98 приоритетов меньше, чем в Windows Me или 2000, но они таки есть J. Вот они.

Приоритет реального времени (real time) — программа выполняется так, как будто она одна и есть цель жизни Windows. Все ресурсы отдаются ей.

Высокий приоритет (high) — программа выполняется так, чтобы оставить чуть-чуть остальным приложениям.

Нормальный (normal) — выполнение идет обычным путем.

Низкий (idle) — если выполнение и идет, то только когда Windows делать нечего.

Ну так вот, запущенная программа сначала получает приоритет Normal, и выполняется своим чередом. При этом приоритете, что бы программа ни делала, она не сможет съесть ресурсов столько, чтобы повис Windows. В теории. Но нам так не подходит. Нам надо приоритет high или, если все очень напряжно, real time. Но real time — вещь опасная. Может запросто затормозиться даже мышка. А об остальных программах я и говорить на хочу. Просто копец и все тут. Итак, как же все таки приоритет поменять.

Снова API

Да, за установку приоритета отвечает функция SetPriorityClass. То есть, вызвав ее, и передав все, что ей надо, мы получим нужный приоритет.

  • hProcess — это Handle процесса. О нем ниже.
  • dwPriorityClass — приоритет. Он то нам и нужен.

Константы приоритетов:

Все просто — берем константу и вперед, но нам надо получить Handle процесса. То есть, процесс и окно для Windows вещи хоть и почти синонимичные, но не всегда. Handle окна — одна вещь, Handle процесса — совсем другая. То есть, у процесса может быть много окон, но у окна только один процесс владелец. Значит, нам надо научиться находить Handle именно процесса. В этом нам поможет функция OpenProcess, которая после передачи ей параметров, скажет, что за Handle у процесса.

dwDesiredAccess — что мы хотим узнать (Handle у процесса бывают разные, для завершения процесса — одни, для получения информации — другой). Мы будем использовать константу PROCESS_QUERY_INFORMATION, то есть опрашивать процесс.

Читайте также:  Python преобразовать в json

bInheritHandle — переменная Boolean. Если ее передать True, то полученный Handle может в будущем быть использован другим процессом. Но нам это не надо. Передаем туда False.

DwProcessId — так, а это очередная вещь — идентификатор (id) процесса. Нам надо и его получить. Как? Просто! Функция GetCurrentProcessId, вызываемая без параметров (слава Богу) просто возвращает id текущего процесса.

Все. Можно вздохнуть и все сделать красиво.

Но сразу предупрежу — приоритет лучше всего менять не постоянно, а на время. То есть, перед критическим участком кода ставим приоритет High или RealTime, а потом снова Normal. Еще раз повторюсь, что использование RealTime приоритета — вещь опасная. Ну вот и все, заставьте Windows поделиться пирогом ресурсов!

Доброго времени!

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

Представьте, вот вы запускаете тяжелую игру (или редактор видео, или еще что-то. ) далеко на не самом мощном компьютере. Причем, помимо вашей игры в Windows (обычно) запущено достаточно большое количество процессов, приложений. И в определенное время они могут "забирать" часть ресурсов себе — в результате игра время от времени притормаживает.

Смена приоритета процесса же позволяет указать Windows, что запущенная игра — это первоочередная задача, которой нужно выделить все основные ресурсы (а все остальное может подождать. ) . Благодаря заданию приоритетов для самых "главных" для вас программ — можно снизить количество притормаживаний и лагов, ускорить их работу.

Т.е. тема достаточно интересна, и может быть очень полезна как для любителей игр, так и для работы с видео, фото и пр. ресурсоемкими задачами.

Теперь ближе к сути.

Работа с приоритетами.

У каждой запускаемой программы или процесса в Windows есть приоритет. Обычно, ОС Windows "сама знает" кому и что выделять, и делает это автоматически (без участия пользователя). Вообще разнообразие приоритетов не такое уж и большое:

  1. Idle (низкий) — программы, выполнение которых может и подождать (при выставлении данного приоритета некоторый софт может тормозить) ;
  2. Below Normal (ниже среднего);
  3. Normal (средний) — большинство программ запускаются со средним приоритетом;
  4. Above Normal (выше среднего);
  5. High (высокий);
  6. Real Time (реального времени) — самый высокий приоритет. При его выставлении — в первую очередь будет выполняться именно эта программа.

Отмечу, что с приоритетами High и Real Time нужно быть крайне осторожными: в некоторых случаях при выставлении оных — компьютер может зависнуть или Windows завершит работу с ошибкой.

Еще один совет : нет необходимости выставлять приоритет каждой запускаемой программе (с этим Windows хорошо справляется в авто-режиме). Как правило, есть смысл указать приоритет для 2÷5 часто-используемых приложений, которые для вас наиболее важны.

Изменение приоритета

И так, чтобы поменять приоритет работающей программы (процесса) в Windows — необходимо воспользоваться диспетчером задач . Для того, чтобы его вызвать — нажмите сочетание кнопок Ctrl+Shift+Esc (либо Ctrl+Alt+Del).

Для вызова диспетчера задач — нажмите Ctrl+Shift+Esc

Читайте также:  Как передать голосовое сообщение в контакте

Далее откройте вкладку "Подробности" (это для Windows 10, для Windows 7 — "Процессы") и найдите в списке нужный процесс ( прим. : название программы совпадает с названием процесса) .

После, на нужном процессе кликните правой кнопкой мышки: в появившемся меню перейдите во вкладку "Задать приоритет" и укажите нужный вам.

Задание приоритета для запущенного процесса

Собственно, на этом всё! Теперь запущенная программа будет работать с новым приоритетом. При выставлении приоритета реального времени — возможно, компьютер начнет тормозить.

Сохранение приоритета с помощью настроек реестра

После перезагрузки компьютера (или при перезапуске программы) — установленный вами приоритет сбрасывается (т.е. Windows снова задает его автоматически). И это не очень удобно.

Но с помощью настроек реестра можно "сохранить" указанный вами приоритет (т.е. Windows будет "знать", что эту программу нужно запустить с таким-то приоритетом).

Как это сделать:

    сначала необходимо открыть редактор реестра (нажмите Win+R , и введите команду regedit , нажмите OK). У кого не открылся редактор, привожу в помощь одну свою старую заметку: https://ocomp.info/sposoby-otkryit-redaktor-reestra.html

regedit — открыть редактор реестра

далее необходимо открыть следующую ветку реестра (можно просто ее скопировать и вставить в редактор): HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options

Какую ветку в реестре нужно открыть

затем нужно узнать точное название исполняемого файла программы (игры). Для этого просто щелкните правой кнопкой мышки по ее ярлыку и перейдите в свойства . После, в разделе "Ярлык" — в строке "Объект" скопируйте название исполняемого файла;

Узнаем название исполняемого файла игры / Кликабельно

теперь в открытой ветке реестра создайте раздел (папку) с именем исполняемого файла программы (которое мы узнали в предыдущем шаге) . В моем случае — это "civilization4.exe" (без кавычек и с маленькими буквами!) ;

Создание раздела / Реестр

далее в ветке с названием игры (программы) создайте еще один раздел (папку) и назовите ее "PerfOptions" , см. пример ниже;

последний штрих: в разделе "PerfOptions" создайте параметр DWORD (32), присвойте ему имя " CpuPriorityClass " и задайте значение исходя из требований, в моем случае это "3" ( прим.: 1 — низкий приоритет; 5 — ниже среднего; 8 — средний; 6 — выше среднего; 3 — высокий) .

Создать параметр DWORD32

в конечном итоге получится так, как показано на скрине ниже.

Что получилось в итоге!

  • теперь при запуске игры Civilization — Windows будет автоматически выставлять ей высокий приоритет.
  • Для Windows 7 есть спец. программа Prio, позволяющая задавать (и сохранять) приоритеты для практически любых программ и процессов. Правда, в Windows 10 она не работает (поэтому выше я и привел универсальный рабочий способ для всех современных ОС Windows).

    Запуск приложения с нужным приоритетом (через командную строку)

    Есть еще один вариант задания приоритета приложению — речь идет о командной строке (разумеется, если создать "BAT" файл — то запуская его, можно всегда иметь программу с нужным приоритетом) .

    Как это сделать:

      создать на рабочем столе (например) обычный текстовый файл;

    Создать текстовый документ

  • далее добавить в него "определенную строку": cmd.exe /c start /high /D "C:gamesSid Meier’s Civilization 4 CompleteBeyond the Sword" Civ4BeyondSword.exe
  • обратите внимание, в этой строке вам нужно изменить путь до установленной игры (программы) на диске ("C:gamesSid Meier’s Civilization 4 CompleteBeyond the Sword") и название ее исполняемого файла (Civ4BeyondSword.exe) на свои данные;
  • Читайте также:  Для чего кнопка dpi на беспроводной мышке

    Вставка строки в блокнот и сохранение

    после чего сохраните текстовый файл, закройте его и переименуйте расширение: с "TXT" на "BAT" (или "CMD"). Если у вас не отображается расширение файла, ознакомьтесь вот с этой заметкой: https://ocomp.info/kak-uvidet-skryityie-faylyi-i-papki.html

    Изменяем расширение блокнота с TXT на CMD

  • теперь можно кликать на получившийся файл и игра будет запускаться с нужным вам приоритетом. Удобно?!
  • Дополнения по теме будут весьма кстати.

    Приоритеты потоков

    Интерфейс Win32 API позволяет программисту управлять распределением времени между потоками; это распространяется и на приложения, написанные на Delphi. Операционная система планирует время процессора в соответствии с приоритетами потоков.

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

    В свою очередь, процессы могут иметь следующие классы приоритетов.

    Классы Above normal и Below normal появились впервые в Windows 2000.

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

    Использование класса High ограничено процессами, которые должны завершаться за короткое время, чтобы не вызвать сбойной ситуации. Пример — процесс, который посылает сигналы внешнему устройству; причем устройство отключается, если не получит своевременный сигнал. Если у вас возникли проблемы с производительностью вашего приложения, было бы неправильно решать их просто за счет повышения его приоритета до h i gh — такой процесс также влияет на всю ОС. Возможно, в этом случае следует модернизировать компьютер.

    Большинство процессов запускается в рамках класса с нормальным приоритетом. Нормальный приоритет означает, что процесс не требует какого-либо специального внимания со стороны операционной системы.

    И наконец, процессы с фоновым приоритетом запускаются лишь в том случае, если в очереди Диспетчера задач нет других процессов. Обычные виды приложений, использующие такой приоритет, — это программы сохранения экрана и системные агенты ( system agents ). Программисты могут использовать фоновые процессы для организации завершающих операций и реорганизации данных. Примерами могут служить сохранение документа или резервное копирование базы данных.

    Приоритеты имеют значения от 0 до 31. Процесс, породивший поток, может впоследствии изменить его приоритет; в этой ситуации программист имеет возможность управлять скоростью отклика каждого потока.

    Базовый приоритет нити складывается из двух составляющих, однако это не означает, что он просто равен их сумме. Взгляните на соответствующие величины, которые показаны в табл. 29.1. Для потока, имеющего собственный приоритет THREAD_PRIORITY_IDLE , базовый приоритет будет равен 1, невзирая на приоритет породившего его процесса.

    И еще для класса Normal приведены по два приоритета, снабженные буквами В (Background) и F (Foreground) . Объяснение этому дается ниже.

    Таблица 29.1. Классы процессов и приоритеты их потоков (для Windows 2000 и ХР)

    Ссылка на основную публикацию
    Что делать если отключился звук на компьютере
    Мы зарегистрировали подозрительный трафик, исходящий из вашей сети. С помощью этой страницы мы сможем определить, что запросы отправляете именно вы,...
    Фотографии купе в поезде
    Интересный фотоотчет о поездке на одном из первых рейсов двухэтажных поездов. Смотрим далее, как все устроено внутри таких двухэтажных вагонов...
    Фотография с самым большим разрешением в мире
    Представляем вашему вниманию нашу подборку самых больших фотографий в мире. Для их просмотра вам будет необходим FlashPlayer. Его можно скачать...
    Что делать если полетели драйвера видеокарты
    Распространенная ошибка в Windows 7 и реже в Windows 10 и 8 — сообщение «Видеодрайвер перестал отвечать и был успешно...
    Adblock detector