No Image

Что такое приоритет реального времени

СОДЕРЖАНИЕ
0 просмотров
22 января 2020

Введение

По определению, 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, то есть опрашивать процесс.

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

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

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

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

Читайте также:  32 Bit это x86 или x64

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

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

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

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

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

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

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

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

  1. >(при выставлении данного приоритета некоторый софт может тормозить) ;
  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) на свои данные;
  • Вставка строки в блокнот и сохранение

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

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

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

    из того, что я читал в прошлом, вам рекомендуется не изменять приоритет ваших приложений windows программно, и если вы это сделаете, вы никогда не должны менять их на "в реальном времени".

    Что делает настройка приоритета процесса "в реальном времени" по сравнению с "высоким" и "выше нормального"?

    7 ответов

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

    создание реалтайм приоритет потоков требует привилегий (SeIncreaseBasePriorityPrivilege), поэтому это может быть сделано только административными пользователями.

    для Vista и за ее пределами, один вариант для приложений, которые требуют, чтобы они работали на приоритеты в реальном времени-использовать Служба Планировщика Мультимедийных Классов (MMCSS) и пусть он управляет приоритетом ваших потоков. MMCSS не позволит вашему приложению использовать слишком много времени процессора, поэтому вам не придется беспокоиться о танкере машины.

    просто класс приоритета " в реальном времени "выше класса приоритета" High". Не думаю, что есть что-то большее. О да — вы должны иметь SeIncreaseBasePriorityPrivilege чтобы поместить поток в класс реального времени.

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

    Читайте также:  Управление вентилятором процессора windows 10

    глава Русиновича "внутри Windows" о том, как Windows обрабатывает приоритеты, является отличным ресурсом для изучения того, как это работает:

    обратите внимание, что нет абсолютно никаких проблем с потоком, имеющим приоритет в реальном времени в обычной системе Windows — они не обязательно для специальных процессов, работающих на машинах dedicatd. Я предполагаю, что мультимедийные драйверы и / или процессы могут нуждаться в потоках с приоритетом в реальном времени. Однако такой поток не должен требовать много CPU — он должен блокировать большую часть времени, чтобы обычные системные события получали обработку.

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

    Так что, если вам нужно спросить, не используйте его:)

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

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

    приоритет процесса класс повышает или понижает все эффективные приоритеты потоков в процессе и поэтому считается "базовым приоритетом".

    1. базовый приоритет процесса класс.
    2. индивидуальные приоритеты потоков, смещения базового класса приоритета.

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

    в NT6+ (Vista+), использование Vista Multimedia Class Scheduler-это правильный способ достижения операций в реальном времени в том, что не ОСРВ. Он работает, по большей части, хотя и не идеален, поскольку ОС не предназначена для операций в реальном времени.

    Microsoft считает этот приоритет очень опасно, это правильно. Ни одно приложение не должно использовать его, кроме как в особых обстоятельствах, и даже тогда пытаться ограничить его использование временными потребностями.

    Как только Windows узнает, что программа использует более высокий приоритет, чем обычно, кажется, что это ограничивает приоритет процесса.

    установка приоритета от простоя до реального времени не изменяет использование ЦП.

    Я обнаружил на своем многопроцессорном процессоре AMD, что если я отброшу один из процессоров ot, как последний, использование процессора будет максимальным, а последний процессор останется бездействующим. Скорость процессора увеличивается до 75% на моем Quad AMD.

    использовать Диспетчер задач — >выбрать процесс — >справа Нажмите на процесс — >выбрать — >установить сродство Щелкните все, кроме последнего процессора. Использование ЦП увеличится до максимума на оставшихся процессорах и подсчетах кадров, если обработка видео увеличится.

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

    Как и все другие ответы, прежде чем в режиме реального времени дает этой программе приоритетный класс. Ничего не обрабатывается до тех пор, пока эта программа не будет обработана.
    На моей машине pentium 4 я установил minecraft в режиме реального времени, так как это значительно повышает производительность игры, и система кажется полностью стабильной. так что в реальном времени не так плохо, как кажется, просто если у вас есть многоядерный набор сродства программы к определенному ядру или ядрам (просто не все из них, просто чтобы все остальное могло работать в случае, если программы в реальном времени будут отключены) и установите приоритет в режиме реального времени.

    Комментировать
    0 просмотров
    Комментариев нет, будьте первым кто его оставит

    Это интересно
    No Image Компьютеры
    0 комментариев
    No Image Компьютеры
    0 комментариев
    No Image Компьютеры
    0 комментариев
    No Image Компьютеры
    0 комментариев
    Adblock detector