Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vlákna jsou naplánována tak, aby běžela na základě jejich plánovací priority. Každému vláknu je přiřazena priorita plánování. Úrovně priority jsou v rozsahu od nuly (nejnižší priorita) do 31 (nejvyšší priorita). Pouze vlákno nulové stránky může mít prioritu nuly. (Vlákno pro nulování stránek je systémové vlákno zodpovědné za nulování všech volných stránek, pokud nejsou žádná jiná vlákna, která by bylo potřeba spustit.)
Systém zachází se všemi vlákny se stejnou prioritou jako s rovnocennými. Systém přiřazuje časové řezy všem vláknům s nejvyšší prioritou ve stylu round-robin. Pokud nejsou žádná z těchto vláken připravená ke spuštění, systém přiřadí časové řezy způsobem kruhového dotazování všem vláknům s další nejvyšší prioritou. Pokud je vlákno s vyšší prioritou k dispozici ke spuštění, přestane systém spouštět vlákno s nižší prioritou (bez povolení dokončení pomocí časového řezu) a přiřadí řez na plný úvazek vláknu s vyšší prioritou. Další informace naleznete v tématu kontextové přepínače.
Priorita každého vlákna je určena následujícími kritérii:
- Třída priority procesu
- Úroveň priority vlákna v rámci třídy priority procesu
Třída priority a úroveň priority jsou kombinovány tak, aby vytvořily základní prioritu vlákna. Informace o dynamické prioritě vlákna naleznete v tématu Priority Boosts.
Prioritní třída
Každý proces patří do jedné z následujících tříd priority:
- IDLE_PRIORITY_CLASS
Třída priority pod normální úrovní
NORMAL_PRIORITY_CLASS
ABOVE_NORMAL_PRIORITY_CLASS
TŘÍDA_VYSOKÉ_PRIORITY
Třída priorita v reálném čase (REALTIME_PRIORITY_CLASS)
Ve výchozím nastavení je třída priority procesu NORMAL_PRIORITY_CLASS. Pomocí funkce CreateProcess určete třídu priority podřízeného procesu při jeho vytvoření. Pokud je volající proces IDLE_PRIORITY_CLASS nebo BELOW_NORMAL_PRIORITY_CLASS, nový proces zdědí tuto třídu. Pomocí funkce GetPriorityClass určete aktuální třídu priority procesu a funkci SetPriorityClass ke změně třídy priority procesu.
Procesy, které monitorují systém, jako jsou šetřiče obrazovky nebo aplikace, které pravidelně aktualizují zobrazení, by měly používat IDLE_PRIORITY_CLASS. Tím zabráníte, aby vlákna tohoto procesu, která nemají vysokou prioritu, zasahovala do vláken s vyšší prioritou.
Používejte HIGH_PRIORITY_CLASS opatrně. Pokud vlákno běží na nejvyšší úrovni priority pro delší období, ostatní vlákna v systému nezískají čas procesoru. Pokud je současně nastaveno několik vláken s vysokou prioritou, vlákna ztratí svou účinnost. Třída s vysokou prioritou by měla být vyhrazena pro vlákna, která musí reagovat na události kritické pro čas. Pokud vaše aplikace provádí jednu úlohu, která vyžaduje třídu s vysokou prioritou, zatímco ostatní její úkoly jsou normální prioritou, použijte SetPriorityClass zvýšit prioritu třídy aplikace dočasně; po dokončení úkolu kritického času ho zmenšete. Další strategií je vytvořit proces s vysokou prioritou, který má všechna vlákna zablokovaná většinu času, probuzení vláken pouze v případě, že jsou potřeba kritické úlohy. Důležitým bodem je, že vlákno s vysokou prioritou by se mělo spustit po krátkou dobu a pouze v případě, že má k provedení časově kritickou práci.
Téměř nikdy byste neměli používat REALTIME_PRIORITY_CLASS, protože tím přerušíte systémová vlákna, která spravují vstup myši, vstup klávesnice a vyprazdňování disku na pozadí. Tato třída může být vhodná pro aplikace, které "komunikují" přímo s hardwarem nebo provádějí krátké úlohy, které by měly mít omezené přerušení.
Úroveň priority
V rámci každé třídy priority jsou následující úrovně priority:
- THREAD_PRIORITY_IDLE
THREAD_PRIORITY_LOWEST (nejnižší priorita vlákna)
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_NORMAL (normální priorita vlákna)
THREAD_PRIORITY_ABOVE_NORMAL
Priorita_vlákna_nejvyšší
Priorita vlákna: Kritická pro čas
Všechna vlákna se vytvářejí pomocí THREAD_PRIORITY_NORMAL. To znamená, že priorita vlákna je stejná jako třída priority procesu. Po vytvoření vlákna použijte funkci SetThreadPriority k úpravě priority vzhledem k jiným vláknům v procesu.
Typickou strategií je použít THREAD_PRIORITY_ABOVE_NORMAL nebo THREAD_PRIORITY_HIGHEST pro vstupní vlákno procesu, aby aplikace reagovala na uživatele. Vlákna na pozadí, zejména ta, která jsou náročná na procesor, je možné nastavit na THREAD_PRIORITY_BELOW_NORMAL nebo THREAD_PRIORITY_LOWEST, aby je bylo možné v případě potřeby přerušit. Pokud však máte vlákno, které čeká na jiné vlákno s nižší prioritou dokončení nějaké úlohy, nezapomeňte zablokovat provádění čekající vlákna s vysokou prioritou. K tomu použijte čekací funkci , kritickou sekci nebo funkci Sleep, SleepEx, nebo funkci SwitchToThread. To je vhodnější než mít vlákno vykonávající smyčku. Jinak se proces může stát zablokován, protože vlákno s nižší prioritou není nikdy zařazeno do plánu.
Pokud chcete určit aktuální úroveň priority vlákna, použijte funkci GetThreadPriority.
Základní priorita
Úroveň priority procesu a priority vlákna jsou kombinovány tak, aby vytvořily základní prioritu každého vlákna.
Následující tabulka ukazuje základní prioritu pro kombinace třídy priority procesu a hodnoty priority vlákna.
| Třída priority procesu | Úroveň priority vlákna | Základní priorita | |
|---|---|---|---|
| IDLE_PRIORITY_CLASS | THREAD_PRIORITY_IDLE | 1 | |
| NEJNIŽŠÍ_PRIORITA_VLÁKNA | 2 | ||
| THREAD_PRIORITY_BELOW_NORMAL | 3 | ||
| THREAD_PRIORITY_NORMAL | 4 | ||
| THREAD_PRIORITY_ABOVE_NORMAL | 5 | ||
| THREAD_PRIORITY_HIGHEST | 6 | ||
| KRITICKÁ PRIORITA VLAKNA CASU | 15 | ||
| TŘÍDA_PRIORITA_POD_NORMÁLNÍ | THREAD_PRIORITY_IDLE | 1 | |
| THREAD_PRIORITY_LOWEST | 4 | ||
| PRIORITA_VLÁKNA_POD_NORMÁLEM | 5 | ||
| Priorita_vlákna_normální | 6 | ||
| THREAD_PRIORITY_ABOVE_NORMAL | 7 | ||
| VLÁKNOVÁ_PRIORITA_NEJVYŠŠÍ | 8 | ||
| THREAD_PRIORITY_TIME_CRITICAL | 15 | ||
| NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_IDLE (Nejnižší priorita vlákna) | 1 | |
| THREAD_PRIORITY_NEJNIŽŠÍ | 6 | ||
| THREAD_PRIORITY_BELOW_NORMAL | 7 | ||
| NORMÁLNÍ_PRIORITA_VLÁKNA | 8 | ||
| Priorita vlákna nad normální | 9 | ||
| THREAD_PRIORITY_HIGHEST | 10 | ||
| THREAD_PRIORITY_TIME_CRITICAL (priorita vlákna – časově kritická) | 15 | ||
| ABOVE_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_IDLE | 1 | |
| Nejnižší priorita vlákna | 8 | ||
| Priorita vlákna pod normálem | 9 | ||
| Priorita vlákna: Normální | 10 | ||
| THREAD_PRIORITY_ABOVE_NORMAL | 11 | ||
| VLÁKNO_PRIORITA_NEJVYŠŠÍ | 12 | ||
| THREAD_PRIORITY_TIME_CRITICAL | 15 | ||
| třída_vysoké_prioritě | THREAD_PRIORITY_IDLE | 1 | |
| NEJNIŽŠÍ_PRIORITA_VLÁKNA | 11 | ||
| Priorita vlákna pod normální | 12 | ||
| PRIORITA_VLÁKNA_NORMÁLNÍ | 13 | ||
| THREAD_PRIORITY_ABOVE_NORMAL | 14 | ||
| NEJVYŠŠÍ_PRIORITA_VLÁKNA | 15 | ||
| PRIORITA_VLÁKNA_ČAS_KRITICKÝ | 15 | ||
| Reálný čas: Priorita Třída | THREAD_PRIORITY_IDLE | 16 | |
| Nejnižší_priorita_vlákna | 22 | ||
| THREAD_PRIORITY_BELOW_NORMAL | 23 | ||
| Normální priorita vlákna | 24 | ||
| Vlákno s prioritou vyšší než normální | 25 | ||
| Nejvyšší_priorita_vlákna | 26 | ||
| THREAD_PRIORITY_TIME_CRITICAL | 31 | ||