Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A szálakat a ütemezési prioritásukalapján ütemezik. Minden szálhoz ütemezési prioritás tartozik. A prioritási szintek nulla (legalacsonyabb prioritás) és 31 (legmagasabb prioritás) között mozognak. Csak a nullaoldalas szál rendelkezhet nulla prioritással. (A nullaoldalas szál egy rendszerszál, amely felelős az ingyenes lapok nullázásáért, ha nincs más szál, amelyet futtatnia kell.)
A rendszer az összes szálat ugyanolyan prioritással kezeli, mint az egyenlőséget. A rendszer alternáló módon rendeli hozzá az időszeleteket a legmagasabb prioritású szálakhoz. Ha egyik szál sem áll készen a futtatásra, a rendszer körkörös módon rendeli hozzá az időszeleteket a következő legmagasabb prioritású szálakhoz. Ha egy magasabb prioritású szál futtathatóvá válik, a rendszer leállítja az alacsonyabb prioritású szál végrehajtását (anélkül, hogy az befejezné az időszeletét), és teljes időszeletet rendel a magasabb prioritású szálhoz. További információkért lásd: Környezetváltások.
Az egyes szálak prioritását a következő feltételek határozzák meg:
- A folyamat prioritási osztálya
- A szál prioritási szintje a folyamat prioritási osztályán belül
A prioritási osztály és a prioritási szint kombinálva alkotják egy szál alap prioritását. A szál dinamikus prioritásáról további információt a Prioritási kiemelésekcímű témakörben talál.
Prioritási osztály
Minden folyamat a következő prioritási osztályok egyikéhez tartozik:
- IDLE_PRIORITY_CLASS
BELOW_NORMAL_PRIORITY_CLASS
Normál_prioritás_osztály
ÁTLAGOSNÁL_MAGASABB_PRIORITÁS_OSZTÁLY
MAGAS_PRIORITÁS_OSZTÁLY
REALTIME_PRIORITY_CLASS
Alapértelmezés szerint a folyamat prioritási osztálya NORMAL_PRIORITY_CLASS. A CreateProcess függvénnyel adja meg a gyermekfolyamat prioritási osztályát a létrehozáskor. Ha a hívási folyamat az IDLE_PRIORITY_CLASS vagy a BELOW_NORMAL_PRIORITY_CLASS, az új folyamat örökölni fogja ezt az osztályt. A GetPriorityClass függvénnyel meghatározhatja egy folyamat aktuális prioritási osztályát, a SetPriorityClass függvény pedig a folyamat prioritási osztályát.
A rendszert figyelő folyamatoknak, például a képernyőkímélőknek vagy a kijelzőt rendszeresen frissítő alkalmazásoknak IDLE_PRIORITY_CLASS kell használniuk. Ez megakadályozza, hogy a folyamat szálai, amelyek nem rendelkeznek magas prioritással, zavarják a magasabb prioritású szálakat.
Óvatosan használja HIGH_PRIORITY_CLASS. Ha egy szál hosszabb ideig a legmagasabb prioritási szinten fut, a rendszer többi szála nem kap processzoridőt. Ha egyszerre több szál is magas prioritással van beállítva, a szálak elveszítik hatékonyságukat. A magas prioritású osztályt olyan szálak számára kell fenntartani, amelyeknek reagálnia kell az idő szempontjából kritikus eseményekre. Ha az alkalmazás egy olyan feladatot hajt végre, amely megköveteli a magas prioritású osztályt, míg a többi tevékenység normál prioritású, használja SetPriorityClass az alkalmazás prioritási osztályának ideiglenes emeléséhez; majd csökkentse azt az idő szempontjából kritikus feladat befejezése után. Egy másik stratégia egy magas prioritású folyamat létrehozása, amelynek során az összes szála blokkolva van az idő nagy részében, és csak kritikus feladatok esetén ébreszti fel a szálakat. A lényeg az, hogy egy magas prioritású szálnak rövid ideig kell futnia, és csak akkor, ha idő szempontjából kritikus fontosságú feladatokat kell elvégeznie.
Szinte soha ne használjon REALTIME_PRIORITY_CLASS, mert ez megszakítja az egérbemenetet, a billentyűzetbemenetet és a háttérlemez kiürítését kezelő rendszerszálakat. Ez az osztály alkalmas lehet olyan alkalmazásokra, amelyek közvetlenül a hardverhez "beszélnek", vagy olyan rövid feladatokat hajtanak végre, amelyeknek korlátozott megszakításokkal kell rendelkezniük.
Prioritási szint
Az egyes prioritási osztályok prioritási szintjei a következők:
- THREAD_PRIORITY_IDLE
SZÁL_PRIORITÁS_LEGALACSONYABB
SZÁL_PRIORITÁS_A_NORMÁL_ALATT
Normál szálprioritás
THREAD_PRIORITY_ABOVE_NORMAL
Legmagasabb szálprioritás
KÜLÖNÖS FONTOSSÁGÚ IDŐ PRIORITÁSÚ SZÁL
Minden szál THREAD_PRIORITY_NORMAL használatával jön létre. Ez azt jelenti, hogy a szál prioritása megegyezik a folyamat prioritási osztályával. Miután létrehozott egy szálat, a SetThreadPriority függvénnyel állítsa a prioritást a folyamat többi szálához képest.
Egy tipikus stratégia a folyamat bemeneti szálához THREAD_PRIORITY_ABOVE_NORMAL vagy THREAD_PRIORITY_HIGHEST használata annak biztosítása érdekében, hogy az alkalmazás reagáljon a felhasználóra. Az olyan háttérszálak, amelyek különösen processzorigényesek, beállíthatók THREAD_PRIORITY_BELOW_NORMAL vagy THREAD_PRIORITY_LOWEST értékre, hogy szükség esetén kiszoríthatók legyenek. Ha azonban egy szál egy másik, alacsonyabb prioritású szálra vár egy feladat elvégzéséhez, mindenképpen tiltsa le a magas prioritású várakozó szál végrehajtását. Ehhez használjon egy várakozási függvényt, kritikus szakaszt, vagy a Sleep függvényt, SleepExvagy SwitchToThread függvényt. Jobb, mint ha a szál egy hurkot hajtana végre. Ellenkező esetben előfordulhat, hogy a folyamat holtpontra kerül, mert az alacsonyabb prioritású szál nincs ütemezve.
A szál aktuális prioritási szintjének meghatározásához használja a GetThreadPriority függvényt.
Alap prioritás
A folyamat prioritási osztálya és a szál prioritási szintje kombinálva alkotja az egyes szálak alap prioritását.
Az alábbi táblázat a folyamatprioritási osztály és a szál prioritási érték kombinációinak alap prioritását mutatja be.
| Folyamat prioritási osztálya | Szál prioritási szintje | Alap prioritás | |
|---|---|---|---|
| IDLE_PRIORITY_CLASS | THREAD_PRIORITY_IDLE | 1 | |
| Legalacsonyabb szálprioritás | 2 | ||
| SZÁL_PRIORITÁS_AZ_ÁTLAGOS_ALATT | 3 | ||
| SZÁL_PRIORITÁS_NORMÁL (THREAD_PRIORITY_NORMAL) | 4 | ||
| SZÁLAS_PRIORITÁS_AZ_NORMÁL_FELETT | 5 | ||
| THREAD_PRIORITY_HIGHEST | 6 | ||
| THREAD_PRIORITY_TIME_CRITICAL | 15 | ||
| BELOW_NORMAL_PRIORITY_CLASS | SZÁL_PRIORITÁS_TÉTLEN | 1 | |
| THREAD_PRIORITY_ALACSONYABB | 4 | ||
| THREAD_PRIORITY_BELOW_NORMAL | 5 | ||
| THREAD_PRIORITY_NORMAL | 6 | ||
| SZÁL_PRIORITÁS_AZ_ÁTLOGOS_FELETT | 7 | ||
| THREAD_PRIORITY_HIGHEST | 8 | ||
| THREAD_PRIORITY_TIME_CRITICAL | 15 | ||
| NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_IDLE | 1 | |
| SZÁLAK_PRIORITÁSA_LEGALACSONYABB | 6 | ||
| SZÁLFOLYAMAT_PRIORITÁS_A_NORMAL_ALATT | 7 | ||
| SZÁLF_PRIORITÁS_NORMÁLIS | 8 | ||
| SZÁL_PRIORITÁS_A_NORMÁL_FÖLÖTT | 9 | ||
| SZÁL_PRIORITÁS_LEGMAGASABB | 10 | ||
| SZÁL_PRIORITÁS_IDŐ_KRITIKUS | 15 | ||
| ABOVE_NORMAL_PRIORITY_CLASS | THREAD_PRIORITY_IDLE | 1 | |
| THREAD_PRIORITY_LOWEST | 8 | ||
| SZÁL_PRIORITÁS_A_NORMAL_ALATT | 9 | ||
| SZÁL_PRIORITÁS_NORMÁL | 10 | ||
| THREAD_PRIORITY_ABOVE_NORMAL | 11 | ||
| THREAD_PRIORITY_HIGHEST | 12 | ||
| SZÁLFOLYAMAT_PRIORITÁS_IDŐ_KRITIKUS | 15 | ||
| Magas_prioritású_osztály | SZÁLFOLYAMAT_PRIORITÁS_TÉTLEN | 1 | |
| THREAD_PRIORITY_LOWEST | 11 | ||
| THREAD_PRIORITY_BELOW_NORMAL (szál-prioritás normál alatt) | 12 | ||
| SZÁL_PRIORITÁS_NORMÁL | 13 | ||
| SZÁL_PRIORITÁS_A_NORMÁLNÁL_MAGASABB | 14 | ||
| SZÁLFOLYAMAT_PRIORITÁS_LEGMAGASABB | 15 | ||
| KIRITÉS_PRIORITÁS_IDŐ_KRITIKUS | 15 | ||
| REALTIME_PRIORITY_OSZTÁLY | THREAD_PRIORITY_IDLE | 16 | |
| SZÁL_PRIORITÁS_LEGALACSONYABB | 22 | ||
| THREAD_PRIORITY_ALACSONYABB_A_NORMÁLNÁL | 23 | ||
| THREAD_PRIORITY_NORMAL (Normál szálprioritás) | 24 | ||
| SZÁL_PRIORITÁS_AZ_ÁTLAG_FELETTI | 25 | ||
| SZÁL_PRIORITÁS_LEGMAGASABB | 26 | ||
| THREAD_PRIORITY_TIME_CRITICAL | 31 | ||