Låt oss prata om prioriteringar Windows-processer . I de flesta fall finns det inget behov av att "leka" med att prioritera, men ibland en kompetent systemadministratör kan hjälpa systemet att fördela processortiden mer korrekt mellan pågående uppgifter. Det finns inget enskilt recept, men genom "val och sökning" är det ganska genomförbart. Var kan detta behövas? Till exempel, i kombinationen 1C-SQL kan du ge mer processortid till 1C och SQL, som de mest resurskritiska processerna.

I allmänhet kan du visa och ändra prioritet för en pågående process genom Aktivitetshanteraren

WindowsNT/2000/7 /2008

På Windows 2012 den var "begravd" lite djupare

Som framgår av exemplen ovan är endast 6 prioriteringar tillgängliga för dig (som det visar sig senare, dessa är prioriterade klasser). Tillräckligt? Microsoft tror det. Men låt oss komma ihåg den "legendariska" frasen av Bill Geist, som sa att "640 KB RAM kommer att räcka för alla." Men tiden har visat att så är långt ifrån fallet. :)

Låt oss nu ta reda på hur det verkligen är.

Det finns faktiskt 32 prioritetsnivåer i Windows, från 0 till 31.

De är grupperade så här:

  • 31 — 16 realtidsnivåer;
  • 15 — 1 dynamiska nivåer;
  • 0 - Systemnivå reserverad för nollsidig tråd.

När en process skapas tilldelas den en av sex prioriterade klasser:

  1. Realtidsklass (värde 24),
  2. Hög klass (värde 13),
  3. Över normalklass (värde 10),
  4. Normalklass (värde 8),
  5. Under normalklass (värde 6),
  6. eller Idle-klass (värde 4).

Du kan se processprioriteten, enligt beskrivningen ovan, med Task Manager.

Notera: Prioriteter över normal och under normal har införts sedan Windows 2000.

Prioritet för varje tråd ( bastrådsprioritet) består av prioriteringen av dess process och relativ prioritet själva strömmen. Det finns sju relativa trådprioriteringar:

  1. Normal: samma som processen;
  2. Över normalt: +1 för att bearbeta prioritet;
  3. Under normala: -1;
  4. Högst: +2;
  5. Lägsta: -2;
  6. Tidskritisk: ställer in bastrådprioriteten för realtidsklassen till 31, för andra klasser till 15.
  7. Idle : ställer in bastrådprioriteten för realtidsklassen till 16, för andra klasser till 1.

Följande tabell visar process, relativa och bastrådsprioriteter.

Trådprioritet Processklass Processklass
Ledig klass Under normal klass Normal klass Över normal klass Hög klass Realtidsklass
1 På tomgångPå tomgångPå tomgångPå tomgångPå tomgång
2 Lägst
3 Nedan...
4 Ledig klass NormalLägst
5 Ovan...Nedan...
6 Under normal klass HögstaNormalLägst
7 Ovan...Nedan...
8 Normal klass HögstaNormalLägst
9 Ovan...Nedan...
10 Över normal klass HögstaNormal
11 Ovan...Lägst
12 HögstaNedan...
13 Hög klass Normal
14 Ovan...
15 Högsta
15 TidskritiskTidskritiskTidskritiskTidskritiskTidskritisk
16 På tomgång
17
18
19
20
21
22 Lägst
23 Nedan...
24 Realtidsklass Normal
25 Ovan...
26 Högsta
27
28
29
30
31 Tidskritisk

Nu när vi vet allt detta, vad kan vi göra åt det hela? Tja, till exempel, börja använda.

Hur kan du annars köra en process med en "icke-standard" prioritet eller ändra den?

Metod 1. Starta en uppgift/process och ändra prioritet via Task Manager.

Nackdelar med metoden:

  • Endast 6 prioriteringar tillgängliga
  • Byte av prioriteringar görs med musen och är inte automatiserat.

Metod 2. Du kan använda START-kommandot med lämpliga tangenter

De tillgängliga prioritetsnycklarna är som följer (jag utelämnar medvetet nycklarna kommandoraden lag START inte relaterat till den beskrivna processen att arbeta med prioriteringar):

C:\>start /?
Startar ett separat fönster för att köra ett angivet program eller kommando.
START ["titel"]


LÅG Starta applikationen i IDLE-prioritetsklassen.
NORMAL Starta applikationen i prioritetsklassen NORMAL.
HÖG Starta ansökan i klassen HÖG prioritet.
REALTID Starta applikationen i REALTIME prioritetsklassen.
ÖVERNORMAL Starta ansökan i prioritetsklassen ABOVENORMAL.
UNDERNORMAL Starta ansökan i prioritetsklassen BELOWNORMAL.

Som du kan se gör START-kommandot det möjligt att starta en process med samma 6 prioriteringar som är tillgängliga via Task Manager

Nackdelen med metoden:

  • Endast 6 prioriteringar tillgängliga

Metod 3: Använda verktyget wmic.exe

Som visas ovan är Task Manager och START-kommandot ganska otympliga för uppgiften att tilldela prioriteringar. Låt oss se hur man använder detta mer flexibelt. Vi kommer att använda verktyget wmic.exe.

Kommandorad:

wmic process där name="AppName" CALL setprioritet ProcessIDLevel

wmic process där namn = "calc.exe" CALL setpriority 32768

wmic-process där namn = "calc.exe" CALL sätter prioritet "över det normala"

Prioriteter (fördefinierade):

  • tomgång: 64
  • under normala: 16384
  • normalt: 32
  • över det normala: 32768
  • hög prioritet: 128
  • realtid: 256

Reträtt. Vad ska man göra om det finns flera processer med samma namn? Prioriteten för en process kan ändras antingen av processnamnet eller genom att använda PID (Process ID) för processen.

Här är ett kort exempel på hur du kör wmic.exe för att få den information du behöver

Vi använder kommandot:

Notera: Jag kommer inte att ge ett exempel på att utföra detta kommando. Listan över processer är för stor. Du kan göra detta själv, om du vill.

Du kommer att få en lista över processer som körs på din lokal dator. Kör nu kommandot:

wmic process list brief | hitta "cmd.exe"

Resultat:

Jag lanserade speciellt flera kopior av cmd.exe för att göra illustrationen mer komplett.

Nu är listan över processer begränsad till de processer vars exekverbara modulnamn innehåller strängen "cmd.exe". Var uppmärksam på PID för processen/processerna.

Låt oss nu försöka välja de processer vi är intresserade av att använda WMI direkt och utan att tillgripa vanliga kommandoradsverktyg. För att göra detta, skriv helt enkelt:

wmic process där description="cmd.exe" lista kort

Resultat:

Jämför dina resultat. Kom ihåg PID för CMD.EXE-processen.

Kommandorad för att köra wmic.exe

wmic process där processid="XXXX" CALL setprioritet ProcessIDLevel

Nåväl, nu kan vi ändra prioritet för en specifik process (till exempel med PID=8476):

wmic process där processid="8476" CALL setprioritet 32768

wmic-process där processid="8476" CALL sätter prioritet "över det normala"

Instruktioner

Tryck på tangentkombinationen "Ctrl+Alt+Delete". En lista över åtgärder som kan utföras visas på skärmen.

I aktivitetshanterarfönstret som öppnas, gå till fliken "Program".

Välj det program vars prioritet du vill ändra. Klicka på den högerklicka musen och, i rullgardinsmenyn, klicka på objektet "Gå till processer". Alla program som körs på en dator har sina egna processer och det är för dem som prioriteras.

I rullgardinsmenyn ställer du in prioritet på medium, hög, låg eller annat.

Användbara råd

Du kan titta ytterligare information om den pågående processen i aktivitetshanteraren. För att göra detta, högerklicka på den och välj kommandot "Egenskaper". Dialogrutan som visas visar detaljer om processen, inklusive dess placering och storlek. Klicka på fliken Detaljer för att se detaljerad information om processen.

Aktivitetshanteraren kan startas genom att högerklicka på aktivitetsfältet och välja "Task Manager" från rullgardinsmenyn.

Källor:

  • hur du ändrar dina prioriteringar

Processschemaläggning i UNIX baseras på prioritet. Vanligtvis har varje process två prioritetsattribut. Det finns 32 prioritetsnivåer i Windows. På din dator kan du påskynda arbetet med program som finns i operativsystemet. För att göra detta behöver du bara öka prioriteringen av processen.

Instruktioner

Du måste gå till "Task Manager". För att göra detta, högerklicka på avsnittet "Aktivitetsfältet". I snabbmenyn välj "Task Manager". Gå till fliken "Processer". Där kommer du att se en lista över alla pågående processer. Hitta den du vill ha och högerklicka på den. Välj sedan kommandot "Prioritet". Nu kan du öka prioriteringen av processen. "Task Manager" är möjligt.

Du kan också öka prioritet med hjälp av verktyget InqSoft Speedballs. Detta övervakar alla processer. Starta den. Ökar processprioritet automatiskt. Genom att gå till Inställningar kan du ändra inställningarna. I menyn där det står "Öka prioritet till", markera rutan Hög och klicka på "Använd".

Gå till avsnittet Inställningar i kontrollpanelen. Välj Prestanda och underhåll. Gå till System-menyn och växla till fliken Prestanda. Hitta avsnittet Programprestanda och installera med pilen erforderlig nivå processprioritet.

Du kan öka prioritet för en process i Linux också. Detta görs via konsolen. Tryck på det översta kommandot - text kommer att visas framför dig. Nu kan du utföra olika åtgärder. För att öka prioritet, tryck på r-tangenten på tangentbordet.

Om du behöver öka prioritet för en process i ett spel, gör följande. Ta till exempel spelvärlden av Warcraft. Öppna genom "Start" och sedan programmet "Anteckningar". Klistra in följande text: @echo off cd /d "C:/Program Files/World of Warcraft"start/high wow.exe. Ändra denna sökväg: "C:/Program Files/World of Warcraft" till den nya som du kommer att ha. Spara den tidigare skrivna texten i Anteckningar i .bat-format. Starta ditt spel genom den här filen. Du kommer att märka en ökad prioritet.

Källor:

  • hur man ändrar prioritet

Oavsett hur kraftfull reserv av resurser din dator har, är de fortfarande inte oändliga. En speciell OS-komponent distribuerar RAM- och grafikminne, prioritet och frekvens för åtkomst till processorn, cacheminne och några andra resurser mellan alla system- och applikationsprogram som körs. Detta gör han i enlighet med prioritetstabellen, som han själv sammanställer som standard. Användaren har möjlighet att ingripa i fördelningen av vikten av att driva processer.

Instruktioner

Starta avsändaren Windows-uppgifter. Detta kan göras på flera sätt - till exempel genom att trycka på tangentkombinationen Ctrl + Alt + Delete. I Windows 7 visas en extra meny på skärmen där du ska välja "Starta aktivitetshanteraren" och tidigare Windows-versioner det finns inget mellansteg. Ett annat sätt att öppna aktivitetshanteraren är att öppna programstartfönstret genom att trycka på tangentkombinationen Win + R, ange kommandot taskmgr och klicka på OK-knappen.

Högerklicka på raden med önskad process och expandera avsnittet "Prioritet" i snabbmenyn. Som standard har alla processer "normal" prioritet - ändra detta genom att välja något av de sex alternativen som anges. Samtidigt, glöm inte att i vissa fall kan en överdriven ökning av prioriteringen av applikationsprogram (posterna "Hög" och "Realtid") leda till ett trögt svar operativsystem vid tangenttryckningar, musrörelser osv. Samma problem kan inträffa om prioriteringen är för låg. systemprocesser(till exempel en process som heter explorer).

Per definition är Windows ett multitasking-operativsystem. Det vill säga att flera uppgifter kan utföras i den samtidigt. Uppgiften är dock en annan. Och skillnaden ligger i prioritet. Det vill säga när man utför ev Windows-program fördelar resurser på ett visst sätt, beroende på vilken prioritet varje process (program) har. I framtiden kommer jag att kalla program processer, det är lättare. Varje program som körs i Windows är en process. Prioriteringarna är olika - stora, små, men mer om det senare. Hur kan detta hjälpa oss? Här är vad. Många människor klagar på den långsamma exekveringen av Vb-program. Vid ett tillfälle stötte jag på detta med det mest uppenbara exemplet. Föreställ dig ett program som måste utföra någon åtgärd vid ett visst tidsintervall - till exempel visa något för användaren. Enkelt, säger du. Ta en timer och fortsätt. Tänk om programmet utöver detta regelbundet måste räkna något annat, och mer än en gång, och det finns många timers? Det kommer att sakta ner. Och inte Windows, utan bara programmet. Orättvis? Ja. Detta innebär att Windows allokerar få resurser till ditt program, vilket uppenbarligen inte räcker till för det. Så fråga Windows om mer, men hur?

Så här

Så vi måste ändra prioriteringen. Det är dags att prata om dem. I Windows "98 finns det färre prioriteringar än i Windows Me eller 2000, men de finns fortfarande. Här är de.

Realtidsprioritet - programmet körs som om det bara vore syftet med Windows. Alla resurser ges till henne.

Hög prioritet (hög) - programmet körs på ett sådant sätt att det lämnar lite tid för andra applikationer.

Normal - utförandet fortsätter på vanligt sätt.

Låg (tomgång) - om körning sker är det bara när Windows inte har något att göra.

Jo, löpprogrammet får först Normal prioritet och körs som vanligt. Med denna prioritet, oavsett vad programmet gör, kommer det inte att kunna förbruka så många resurser att Windows kommer att hänga sig. I teorin. Men det passar oss inte. Vi behöver hög prioritet eller, om allt är väldigt stressigt, realtid. Men realtid är en farlig sak. Även en mus kan lätt sakta ner. Och jag vill inte prata om resten av programmen. Det är bara en bummer och det är allt. Så, hur kan du ändra prioriteringen?

API igen

Ja, SetPriorityClass-funktionen är ansvarig för att ställa in prioritet. Det vill säga, genom att ringa den och skicka allt den behöver får vi önskad prioritet.

Privat deklarationsfunktion SetPriorityClass _ Lib "kernel32" (ByVal hProcess As Long, _ ByVal dwPriorityClass As Long) As Long

  • hProcess är handtaget för processen. Om honom nedan.
  • dwPriorityClass - prioritet. Det är vad vi behöver.

Prioritetskonstanter:

Privatkonst REALTIME_PRIORITY_CLASS = &H100 Privatkonst HIGH_PRIORITY_CLASS = &H80 Privatkonst NORMAL_PRIORITY_CLASS = &H20 Privatkonst IDLE_PRIORITY_CLASS = &H40

Det är enkelt - ta konstanten och gå vidare, men vi måste få grepp om processen. Det vill säga, process och fönster för Windows är nästan synonyma saker, men inte alltid. Window Handle är en sak, Process Handle är helt annorlunda. Det vill säga, en process kan ha många fönster, men ett fönster har bara en processägare. Det betyder att vi måste lära oss hur man hittar handtaget för själva processen. OpenProcess-funktionen kommer att hjälpa oss med detta efter att ha skickat parametrar till den, den kommer att berätta för oss vad Handle-processen har.

Private Declare Funktion OpenProcess _ Lib "kernel32" (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

dwDesiredAccess - vad vi vill veta (handtaget för en process är annorlunda, för att avsluta processen - en, att ta emot information - en annan). Vi kommer att använda konstanten PROCESS_QUERY_INFORMATION, det vill säga fråga processen.

Privat konst PROCESS_QUERY_INFORMATION = &H400

bInheritHandle är en boolesk variabel. Om du godkänner det True, kan det resulterande handtaget användas av en annan process i framtiden. Men vi behöver inte det här. Vi passerar False där.

DwProcessId - ja, och det här är en annan sak - identifieraren (id) för processen. Vi måste få det också. Hur? Precis! GetCurrentProcessId-funktionen, anropad utan parametrar (tack och lov), returnerar helt enkelt ID:t för den aktuella processen.

Privat deklarationsfunktion GetCurrentProcessId _ Lib "kernel32" Alias ​​​​"GetCurrentProcessId" () Så länge

Alla. Du kan andas och göra allt vackert.

Någon kod

Alternativ Explicit Private Declaration Funktion SetPriorityClass _ Lib "kernel32" (ByVal hProcess As Long, _ ByVal dwPriorityClass As Long) As Long Private Const REALTIME_PRIORITY_CLASS = &H100 Private Const HIGH_PRIORITY_CLASS = &H80 Private Const_0 = &H40 Privat deklarera funktion OpenProcess _ Lib "kernel32" (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Const PROCESS_QUERY_INFORMATION = &H400 Private Declare Funktion GetCurrentProcessId Lib "kernel32" () As Long Private Const ProcId As Long "variabel för process id Dim ProcHandle As Long" variabel för process handle ProcId = GetCurrentProcessId "get id ProcHandle = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcId) "mottog Handle Call SetPriorityClass(ProcHandle set priority, Priority End Sub Private" Form_Load () "ställ in prioriteten SetPriority HIGH_PRIORITY_CLASS End Sub

Vi använder en ordbok. Om program inte stängs använder de vår dators resurs. Du kan se vad som faktiskt händer i ett speciellt Windows OS-program. Men inte bara titta, utan hantera fördelningen av resurser för att förbättra prestandan. Låt oss titta på hur man ökar prioritet i Windows Task Manager.

När man arbetar med många program växlar datorn från ett till ett annat i en viss ordning. De han anser vara viktigast avrättas först. Graden av betydelse kallas prioritet. Vanligtvis styrs det av själva programkoden. Men användaren kan ändra grundparametern till någon annan, och därigenom göra det som är viktigt för honom för tillfället snabbare.

Kötyper

Graden av betydelse har följande gradationer:

  • Realtidsprioritet innebär att alla datorresurser ges till den valda processen, även de resurser som var avsedda för systemprocesser, tänk efter innan du förstärker den i den utsträckningen.
  • hög;
  • över genomsnittet;
  • vanlig;
  • under genomsnittet;
  • kort.

Ändra prioritetsvärden

Låt oss titta på hur du ställer in prioritet i Aktivitetshanteraren:


VIKTIG. Kom ihåg att höga värden för ett program avsevärt kan minska maskinens prestanda som helhet. Öka gradvis, och genom erfarenhet, hitta den grad som gör arbetet bekvämt.

När gäller detta? Främst för att lösa tillfälliga uppgifter. Till exempel, du tittar på en film och samtidigt laddar ner en del data från Internet, och videon avbryts med jämna mellanrum. Att öka spelarens betydelse kommer att lösa detta problem. Detta används också ofta för att förbättra webbläsarens prestanda när du surfar på Internet.

Som redan nämnts är ändringen endast giltig under en viss tidpunkt medan programmet körs. När den startar om kommer den att vara tillbaka till basvärdena. Låt oss överväga så många som möjligt på ett bekvämt sättändra prioritet för Windows-uppgifter.

Andra sätt att arbeta med prestanda

Håller med, att experimentera med inställningarna varje gång är väldigt obekvämt. Det finns specialprogram, vilket förenklar förfarandet. Till exempel Process Explorer och Mz CPU Accelerator. Vi kommer inte att uppehålla oss i detalj, vi kommer bara att notera essensen av deras arbete.

Mz CPU Accelerator låter dig automatiskt öka värdena för det aktiva fönsterprogrammet, vilket gör det mycket effektivt. Dessutom låter den dig styra allokeringen av processorresurser, till exempel för att allokera en eller två kärnor till ett program istället för alla. I allmänhet låter programmet dig öka hastigheten på applikationer.

Process Explorer låter dig få detaljerad information om alla processer som sker på datorn och ställ in mer avancerade inställningar än standardmedel fönster.

Således, genom att veta hur du ändrar prioritetsnivån i Aktivitetshanteraren, kan du öka hastigheten på din dator och undvika fel och frysningar. Om du har tips om hur du ändrar den här inställningen i en viss situation när du arbetar i Windows, dela dem med andra användare genom att lämna en kommentar nedan.

7 svar

En prioritetstråd i realtid kan aldrig förhindras av timeravbrott och körs med högre prioritet än någon annan tråd i systemet. Eftersom en sådan CPU-bunden realtidsprioritetstråd kan förstöra maskinen helt.

Att skapa prioriterade trådar i realtid kräver en behörighet (SeIncreaseBasePriorityPrivilege), så det kan endast göras av en administratör.

För Vista och senare är ett alternativ för applikationer som kräver att de körs i realtidsprioritet att använda Multimedia Class Scheduler Service (MMCSS) och låta den hantera prioriteringen av dina trådar. MMCSS kommer att förhindra att din applikation använder för mycket CPU-tid, så du behöver inte oroa dig för att tanka maskinen.

Det är bara det att prioritetsklassen "Realtid" är högre än prioritetsklassen "Hög". Jag tror inte att det finns så mycket mer där. Åh ja, du måste ha SeIncreaseBasePriorityPrivilege för att lägga tråden i realtidsklassen.

Windows ökar ibland prioriteten för en tråd av olika anledningar, men kommer inte att öka prioriteten för en tråd i en annan prioritetsklass. Det kommer inte heller att öka prioriteten för trådar i realtidsprioritetsklassen. Således kommer en högprioriterad tråd inte att få någon automatisk temporär uppflyttning till realtidsprioritetsklassen.

Russinovichs kapitel "Inuti Windows" om hur Windows hanterar prioriteringar är en fantastisk resurs för att lära sig hur det fungerar:

Observera att det absolut inte finns några problem med en tråd som har realtidsprioritet på ett normalt Windows-system - de är inte nödvändiga för speciella processer som körs på dedikerade maskiner. Jag tror att mediadrivrutiner och/eller processer kan kräva prioriterade trådar i realtid. En sådan tråd bör dock inte kräva stor mängd CPU - den måste blockera för det mesta så att normala systemhändelser kan bearbetas.

Detta kommer att vara den högsta prioritetsinställningen som finns tillgänglig och kommer vanligtvis endast att användas i det fält som är avsett att köra det specifika programmet. Den är faktiskt tillräckligt hög för att den kan svälta ut tangentbords- och mustrådar till den grad att de inte svarar.

Så om du måste fråga, använd den inte :)

I realtid är detta den högsta prioritetsklassen som är tillgänglig för processen. Därför skiljer den sig från "Hög" genom att den är ett steg större, och "Over Normal" genom att den är två steg större.

På samma sätt finns det en trådprioritetsnivå i realtid.

En process prioritetsklass höjer eller sänker alla effektiva prioriteringar av trådar i en process och anses därför vara "basprioritet".

Så processen har:

  • Prioritetsklass för basprocess.
  • Individuella trådprioriteringar, förskjutning basklass prioritet.

Eftersom realtidsapplikationer är tänkta att säkerhetskopieras och absolut måste föregripa andra pågående processer, finns det en speciell säkerhetsbehörighet för att skydda mot oavsiktlig användning av den. Detta bestäms av säkerhetspolicyn.

På NT6+ (Vista+) är användningen av Vista Media Class Scheduler det korrekta sättet att uppnå realtidsoperationer på vad som inte är ett live-operativsystem. Det fungerar, för det mesta, även om det inte är perfekt eftersom operativsystemet inte är designat för realtidsoperationer.

Microsoft anser att denna prioritering är mycket farlig, och det med rätta. Ingen applikation ska använda den förutom under speciella omständigheter, och även då försöka begränsa användningen till tillfälliga behov.

När Windows väl vet att ett program använder en högre prioritet verkar det begränsa processens prioritet.

Att ställa in prioritet från IDLE till REALTIME ändrar INTE CPU-användningen.

Jag hittade på min multiprocessor AMD-processor att om jag kasserar en av CPU:erna som LAST kommer CPU-användningen att vara MAX OUT och den sista CPU:n förblir inaktiv. CPU-hastigheten ökar med upp till 75 % på min Quad AMD.

Använd Aktivitetshanteraren -> välj process->Högerklicka process->Välj->Ange affinitet Klicka på alla utom sista processorn. CPU-användningen kommer att öka till MAX på återstående processorer och antal bildrutor om videobearbetningen ökar.