Správa priorit procesu v systému Windows

Pojďme si promluvit Priority procesu Windows. Ve většině případů není třeba „hrát“ s nastavováním priorit, ale někdy může příslušný správce systému pomoci systému správně rozdělovat čas procesoru mezi spuštěnými úkoly. Neexistuje jediný recept, ale prostřednictvím „výběru a výčtu“ je to docela proveditelné. Kde to může být potřeba? Například v partii 1C-SQL můžete dát více času procesoru 1C a SQL jako nejdůležitější procesy zdrojům.

Obecně můžete pomocí Správce úloh zobrazit a změnit prioritu spuštěného procesu

Windows NT / 2000 /7/ 2008

V systému Windows 2012 je „pohřben“ trochu hlouběji

Jak můžete vidět z výše uvedených příkladů, máte k dispozici pouze 6 priorit (jak se později ukáže) prioritní třídy) Dost? Microsoft si myslí, že ano. Připomeňme si však „legendární“ větu Bill Geist, která říká, že „všem bude stačit 640 kB paměti RAM.“ Ale čas ukázal, že se to zdaleka nestalo :)

Nyní se podívejme, jak to skutečně je.

Ve Windows je ve skutečnosti 32 úrovní priority od 0 do 31.

Jsou seskupeny takto:

  • 31 - 16 úrovně v reálném čase;
  • 15: 1 dynamické úrovně;
  • 0 - systémová úroveň vyhrazena pro vlákno s nulovou stránkou.

Při vytváření procesu je přiřazen jeden ze šesti prioritní třídy:

  1. Třída v reálném čase (hodnota 24),
  2. Vysoká třída (hodnota 13),
  3. Nad normální třídou (hodnota 10),
  4. Normální třída (hodnota 8),
  5. Pod normální třídou (hodnota 6),
  6. nebo třída nečinnosti (hodnota 4).

Prioritu procesu můžete vidět pomocí Správce úloh..

Poznámka:: Priority Nad normální a pod normální se objevily od Windows 2000.

Priorita každého vlákna (základní priorita vlákna) sestává z priority jeho procesu a relativní priorita samotný tok. Existuje sedm relativních priorit vláken:

  1. Normální: stejné jako proces;
  2. Nad normální: +1 pro zpracování priority;
  3. Pod normální: -1;
  4. Nejvyšší: +2;
  5. Nejnižší: -2;
  6. Time critical: nastaví základní prioritu proudu pro třídu Real time na 31, pro ostatní třídy na 15.
  7. Idle: nastaví základní prioritu proudu pro třídu Real time na 16, pro ostatní třídy na 1.

Následující tabulka ukazuje priority procesu, relativní a základní priority vlákna..

Priorita tokuTřída procesuTřída procesu
Volná třídaPod normální třídouNormální třídaNad normální třídouVysoká třídaTřída v reálném čase
1NečinnýNečinnýNečinnýNečinnýNečinný
2Nejnižší
3Níže ...
4Volná třída NormálníNejnižší
5Nad ... Níže ...
6Pod normální třídou NejvyššíNormálníNejnižší
7Nad ... Níže ...
8Normální třída NejvyššíNormálníNejnižší
9Nad ... Níže ...
10Nad normální třídou NejvyššíNormální
11Nad ... Nejnižší
12NejvyššíNíže ...
13Vysoká třída Normální
14Nad ...
15Nejvyšší
15Časově kritickýČasově kritickýČasově kritickýČasově kritickýČasově kritický
16Nečinný
17
18
19
20
21
22Nejnižší
23Níže ...
24Třída v reálném čase Normální
25Nad ...
26Nejvyšší
27
28
29
30
31Časově kritický

Nyní, když jsme se to všichni naučili, co s tím můžeme dělat vše? Například, začít používat.

Jak jinak můžete zahájit proces s „nestandardní“ prioritou nebo změnou?

Metoda 1. Spusťte úlohu / proces a změňte prioritu pomocí Správce úloh.

Nevýhody metody:

  • K dispozici je pouze 6 priorit
  • Prioritní přepínání se provádí pomocí myši, není automatizované.

Metoda 2. Příkaz START můžete použít s odpovídajícími klávesami

Dostupné prioritní klíče jsou následující (záměrně vynechám možnosti příkazového řádku příkazu START nesouvisí s popsaným procesem práce s prioritami):

C: \> start /?
Spustí samostatné okno pro spuštění zadaného programu nebo příkazu.
START ["title"] [/ D cesta] [/ I] [/ MIN] [/ MAX] [/ SEPARATE | / SHARED]
[/ LOW | NORMÁLNÍ / VYSOKÁ | / REALTIME | ABOVENORMAL / BELOWNORMAL]
[/ NODE] [/ AFFINITY] [/ WAIT] [/ B]
[příkaz / program] [parametry]
Nízké       Spusťte aplikaci ve třídě priority IDLE.
Normální     Spusťte aplikaci ve třídě priority NORMAL.
Vysoká       Spusťte aplikaci ve třídě HIGH priority.
REALTIME   Spusťte aplikaci ve třídě priority REALTIME.
ABOVENORMAL Spusťte aplikaci v prioritní třídě ABOVENORMAL.
BELOWNORMAL Spusťte aplikaci ve třídě priority BELOWNORMAL.

Jak vidíte, příkaz START umožňuje zahájit proces se stejnými 6 prioritami, které jsou k dispozici prostřednictvím Správce úloh

Metoda minus:

  • K dispozici je pouze 6 priorit

Metoda 3. Použití obslužného programu wmic.exe

Jak je ukázáno výše, Správce úloh a příkaz START jsou natolik neohrabané, že je třeba stanovit priority. Podívejme se, jak ji pružněji aplikovat. Použijeme tento nástroj wmic.exe.

Příkazový řádek:

wmic process where name = "AppName" CALL setpriority ProcessIDLevel

Příklad:

wmic process where name = "calc.exe" CALL setpriority 32768

nebo

wmic process where name = "calc.exe" CALL setpriority "nad normální"

Priority (předdefinované):

  • nečinný: 64
  • pod normální: 16384
  • normální: 32
  • nad normální: 32768
  • vysoká priorita: 128
  • reálný čas: 256
Ustoupit. Co když existuje několik procesů se stejným názvem? Prioritu procesu lze změnit jak podle názvu procesu, tak pomocí PID (Process ID) procesu.

Zde je krátký příklad spuštění wmic.exe k získání potřebných informací

Používáme příkaz:

wmic seznam procesů krátký

Poznámka:: Nebudu uvádět příklad provádění tohoto příkazu. Získá se příliš velký seznam procesů. Udělejte to sami, pokud chcete.

Získáte seznam procesů běžících na místním počítači. Nyní spusťte příkaz:

wmic seznam procesů stručný | najít "cmd.exe"

Výsledek:

Speciálně zahájeno několik kopií cmd.exe, takže ilustrace byla úplnější.

Nyní je seznam procesů omezen pouze na procesy ve jménu spustitelného modulu, jehož řádek je "cmd.exe". Věnujte pozornost PID procesu (procesů).

Nyní se pokusíme vybrat procesy, které nás zajímají, pomocí přímo WMI a bez použití standardních nástrojů příkazového řádku. Chcete-li to provést, jednoduše napište:

wmic process where description = "cmd.exe" seznam krátký

Výsledek:

Porovnejte výsledky. Pamatujte si PID procesu CMD.EXE.

Příkazový řádek ke spuštění wmic.exe

wmic process where processid = "XXXX" CALL setpriority ProcessIDLevel

Nyní můžeme změnit prioritu konkrétního procesu (například s PID = 8476):

wmic process where processid = "8476" CALL setpriority 32768

nebo

wmic process where processid = "8476" CALL setpriority "nad normální"

Co bude dál? Odhadněte, zkuste, vyberte a jemně upravte priority. Zlepšení práce služeb a procesů a práce konečných uživatelů.