Управление на приоритетите на процесите в Windows

Да поговорим Приоритети за обработка на Windows. В повечето случаи не е необходимо да „играете“ с задаване на приоритети, но понякога компетентен системен администратор може да помогне на системата по-правилно да разпредели времето на процесора между изпълняваните задачи. Няма единна рецепта, но чрез "подбор и изброяване" това е напълно възможно. Къде това може да се наложи? Например, в куп от 1C-SQL можете да дадете повече време за процесор 1C и SQL, като най-критичните процеси към ресурсите.

Като цяло можете да преглеждате и променяте приоритета на стартиран процес чрез диспечера на задачите

Windows NT / 2000 /7/ 2008г

В Windows 2012 тя е „погребана” малко по-дълбоко

Както можете да видите от горните примери, само 6 приоритета са на разположение за вас (както се оказва по-късно, това приоритетни класове). Достатъчно? Microsoft смята, че да. Но нека си припомним „легендарната“ фраза на Бил Гейст, която казваше, че „640 KB оперативна памет ще бъде достатъчна за всички.“ Но времето показа, че това далеч не е така. :)

Сега да видим как е всъщност.

Всъщност в Windows има 32 нива на приоритет, от 0 до 31.

Те са групирани така:

  • 31 - 16 нива в реално време;
  • 15 - 1 динамични нива;
  • 0 - системно ниво, запазено за темата с нулева страница.

Когато създавате процес, му се назначава едно от шест приоритетни класове:

  1. Клас в реално време (стойност 24),
  2. Висок клас (стойност 13),
  3. Над нормалния клас (стойност 10),
  4. Нормален клас (стойност 8),
  5. Под нормален клас (стойност 6),
  6. или празен клас (стойност 4).

Можете да видите приоритета на даден процес, като използвате диспечера на задачите..

забележка: Приоритети над нормалното и под нормалното се появяват след Windows 2000.

Приоритет на всяка нишка (основен приоритет на нишката) се състои от приоритета на неговия процес и относителен приоритет самия поток. Има седем относителни приоритета на нишката:

  1. Нормално: същото като процеса;
  2. Над нормалното: +1 за обработка на приоритет;
  3. Под нормално: -1;
  4. Най-висок: +2;
  5. Най-ниски: -2;
  6. Критично време: задава основния приоритет на потока за реално време клас на 31, за други класове до 15.
  7. Idle: задава основния приоритет на потока за клас реално време на 16, за други класове - на 1.

Следващата таблица показва приоритетите на процеса, относителните и основните приоритети на нишката..

Приоритет на потокаПроцесен класПроцесен клас
Клас на празен ходПод нормален класНормален класНад нормалния класВисок класКлас в реално време
1празенпразенпразенпразенпразен
2Най-ниска
3По-долу ...
4Клас на празен ход нормаленНай-ниска
5По-горе ... По-долу ...
6Под нормален клас Най-високанормаленНай-ниска
7По-горе ... По-долу ...
8Нормален клас Най-високанормаленНай-ниска
9По-горе ... По-долу ...
10Над нормалния клас Най-високанормален
11По-горе ... Най-ниска
12Най-високаПо-долу ...
13Висок клас нормален
14По-горе ...
15Най-висока
15Критично времеКритично времеКритично времеКритично времеКритично време
16празен
17
18
19
20
21
22Най-ниска
23По-долу ...
24Клас в реално време нормален
25По-горе ...
26Най-висока
27
28
29
30
31Критично време

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

Как иначе можете да започнете процеса с "нестандартен" приоритет или промяна?

Метод 1. Изпълнете задачата / процеса и променете приоритета чрез диспечера на задачите.

Минуси на метода:

  • Налични са само 6 приоритета
  • Приоритетното превключване се извършва с мишката, не е автоматизирано.

Метод 2. Можете да използвате командата START със съответните клавиши

Наличните ключове за приоритет са следните (умишлено пропускам опциите на командния ред на командата START не са свързани с описания процес на работа с приоритети):

C: \> старт /?
Стартира отделен прозорец за стартиране на определена програма или команда.
START ["заглавие"] [/ D path] [/ I] [/ MIN] [/ MAX] [/ SEPARATE | / СПОДЕЛЕНО]
[/ LOW | / НОРМАЛЕН | / ВИСОКО | / РЕАЛТИМ | / ABOVENORMAL | / ПОСЛЕДНО]
[/ NODE] [/ AFFINITY] [/ ПОЧАКАЙТЕ] [/ B]
[команда / програма] [параметри]
LOW       Стартирайте приложението в клас приоритети IDLE.
NORMAL     Стартирайте приложението в NORMAL приоритетния клас.
HIGH       Стартирайте приложението в HIGH приоритетния клас.
РЕАЛНО ВРЕМЕ   Стартирайте приложението в приоритетния клас REALTIME.
ABOVENORMAL Стартирайте приложението в приоритетния клас ABOVENORMAL.
BELOWNORMAL Стартирайте приложението в приоритетния клас BELOWNORMAL.

Както можете да видите, командата START дава възможност да стартирате процеса със същите 6 приоритета, които са достъпни чрез диспечера на задачите

Метод минус:

  • Налични са само 6 приоритета

Метод 3. Използване на помощната програма wmic.exe

Както е показано по-горе, диспечерът на задачите и командата START са достатъчно тромави за задачата за приоритизиране. Нека да видим как да го приложим по-гъвкаво. Ще използваме полезността wmic.exe.

Команден ред:

wmic процес, където name = "AppName" CALL setpriority ProcessIDLevel

Пример:

wmic процес, където name = "calc.exe" CALL setpriority 32768

или

wmic процес, където name = "calc.exe" CALL setpriority "над нормалното"

Приоритети (предварително дефинирани):

  • празен ход: 64
  • под нормата: 16384
  • нормално: 32
  • над нормата: 32768
  • висок приоритет: 128
  • реално време: 256
отстъпление. Какво става, ако има няколко процеси с едно и също име? Приоритетът на процеса може да бъде променен както от името на процеса, така и с помощта на PID (Идентификационен номер на процеса) на процеса.

Ето кратък пример за стартиране на wmic.exe, за да получите необходимата информация

Използваме командата:

списък на wmic процес кратък

забележка: Няма да дам пример за изпълнението на тази команда. Получава се твърде голям списък от процеси. Направете сами, ако желаете.

Ще получите списък на процесите, работещи на вашия локален компютър. Сега изпълнете командата:

списък на wmic процес кратък | намери "cmd.exe"

резултат:

Специално пуснаха няколко копия на cmd.exe, така че илюстрацията да е по-пълна.

Сега списъкът на процесите е ограничен само до онези процеси, в името на изпълнимия модул от които има ред "cmd.exe". Обърнете внимание на PID на процеса (ите).

Сега нека се опитаме да подберем процесите, които ни интересуват, като използваме директно WMI и без да прибягваме до стандартни инструменти за команден ред. За да направите това, просто напишете:

wmic процес, където description = "cmd.exe" списък кратък

резултат:

Сравнете резултатите. Запомнете PID на процеса CMD.EXE.

Команден ред за стартиране на wmic.exe

wmic процес, където processid = "XXXX" CALL setpriority ProcessIDLevel

Е, сега можем да променим приоритета на конкретен процес (например с PID = 8476):

wmic процес, където processid = "8476" CALL setpriority 32768

или

wmic процес, при който processid = "8476" CALL setpriority "над нормалното"

Какво следва? Преценете, опитайте, изберете и фино коригирайте приоритетите. Подобряване работата на услугите и процесите, както и работата на крайните потребители.