Priorität ist nur wichtig, wenn mehr ausführbare Threads vorhanden sind als verfügbare CPU-Kerne. Wenn dies geschieht, steuert Priorität, welche Threads ausgeführt werden. In den meisten Systemen gibt es nicht genug Berechnungen für Konflikte auf der CPU: Die Threads sind alle blockiert und warten darauf, dass etwas passiert. Dies kann darauf warten, dass Sie etwas eingeben, die Maus bewegen, den Bildschirm berühren oder Daten von der Festplatte, dem Netzwerk oder einem anderen Gerät, das Sie angeschlossen haben, erhalten oder dass ein anderer Thread die Arbeit an wichtigen Daten beendet Struktur. Es könnte darauf warten, dass ein Teil des Programms von der Festplatte oder einem ausgelagerten Speicher ausgelesen wird, um zurück gelesen zu werden, anstatt explizit eine Datei zu lesen.
In Windows führt der Scheduler auf jeder Prioritätsstufe eine Warteschlange mit ausführbaren Threads. Wenn er eine Planungsentscheidung trifft - entweder, dass ein Thread sein Quantum aufgebraucht hat (zulässige Zeit, bevor etwas anderes ausgeführt werden muss), was bedeutet, dass ein anderer Thread eine Umdrehung erhalten sollte, oder dass der Thread blockiert ist und nicht mehr lauffähig ist oder eine höhere Priorität hat Thread wurde nicht mehr blockiert - der nächste Thread in der Warteschlange auf der obersten Prioritätsebene mit beliebigen ausführbaren Threads wird geplant. Wenn der ausgeführte Thread sein Quantum aufgebraucht hat, wird er an das Ende der Warteschlange gesetzt. Wenn es der einzige Thread ist, der auf seiner Prioritätsstufe lauffähig ist, und es keine anderen ausführbaren Threads mit höherer Priorität gibt, die jedoch nicht ausgeführt werden, erhält der Thread einen weiteren Zug.
In Multicore- / Multiprozessorsystemen kann es Einschränkungen geben, auf welchen Cores ein Thread ausgeführt werden kann. Das System versucht außerdem, Threads auf ihrem idealen Kern und innerhalb ihres NUMA-Knotens zu belassen, so dass die Daten des Threads wahrscheinlich immer noch im Cache dieses Kerns liegen und dass er schnell auf die von ihm erstellten Daten zugreifen kann. Threads werden immer noch auf nicht idealen Kernen ausgeführt, wenn Sie nicht entscheiden können, was als nächstes ausgeführt werden soll.
Das System verwendet verschiedene dynamische Prioritätsschübe und dynamische Quantengrößen, so dass die Vordergrundanwendung (falls erforderlich) mehr Zeit als Hintergrundprozesse erhält und Prozesse nach Abschluss der E / A-Vorgänge (einschließlich Maus, Tastatur und Tastatur) schnell reagieren können Touchscreen-Eingabe). Darüber hinaus wird Prioritätserhöhung verwendet, um Prioritätsinversionen zu umgehen, bei denen ein Thread mit hoher Priorität auf eine Ressource wartet, die ein Thread mit niedriger Priorität derzeit hält. Wenn ein Thread mit mittlerer Priorität ausgeführt wird, verhungert er den Thread mit niedriger Priorität nach Prozessorzeit und hält den Thread mit hoher Priorität hoch. Der Thread mit niedriger Priorität wird also vorübergehend auf die höhere Priorität erhöht, sodass er Zeit erhält und hoffentlich die Ressource freigibt, die der Thread mit hoher Priorität benötigt.
Vor Windows Vista hatte die Thread-Priorität keinen Einfluss darauf, wie schnell E / A-Vorgänge abgeschlossen wurden. Seit Windows Vista können I / Os auch eine Priorität haben, die standardmäßig von der Thread-Priorität stammt.
Zusammenfassung: Wenn Sie die CPU-Last stark belasten, sehen Sie weitgehend keine Änderung der Thread-Prioritäten, und selbst dann ist der Effekt in der Regel minimal. Wenn der Prozess auf E / A warten muss oder nicht mit anderen Prozessen um CPU-Zeit konkurriert, wird er bereits so schnell wie möglich ausgeführt, und eine Änderung der Priorität wird ihn nicht schneller machen.