Die Priorität ist nur wichtig, wenn mehr ausführbare Threads als verfügbare CPU-Kerne vorhanden sind. In diesem Fall steuert die Priorität, welche Threads ausgeführt werden. In den meisten Systemen gibt es nicht genügend Berechnungen für Konflikte auf der CPU: Die Threads sind alle blockiert und warten darauf, dass etwas passiert. Möglicherweise warten Sie darauf, dass Sie etwas eingeben, die Maus bewegen, den Bildschirm berühren oder Daten von der Festplatte, dem Netzwerk, einem anderen Gerät, das Sie angeschlossen haben, oder von einem anderen Thread empfangen werden, um die Arbeit an kritischen Daten zu beenden Struktur. Möglicherweise wartet es darauf, dass ein Teil des Programms von der Festplatte gelesen wird, oder ein Speicher, der zum Zurücklesen ausgelagert wurde, anstatt eine Datei explizit zu lesen.
In Windows verwaltet der Scheduler auf jeder Prioritätsstufe eine Warteschlange mit ausführbaren Threads. Wenn es eine Planungsentscheidung trifft - entweder, dass ein Thread sein Quantum erschöpft hat (zulässige Zeit, bevor etwas anderes ausgeführt werden muss), was bedeutet, dass ein anderer Thread an der Reihe sein sollte, oder dass der Thread blockiert wurde und nicht mehr ausgeführt werden kann oder eine höhere Priorität hat Thread wurde entsperrt - der nächste Thread in der Warteschlange mit der höchsten Priorität mit ausführbaren Threads wird geplant. Wenn der laufende Thread sein Quantum aufgebraucht hat, wird er an das Ende der Warteschlange gestellt. Wenn es der einzige Thread auf seiner Prioritätsstufe ist, der ausgeführt werden kann, und es keine anderen ausführbaren Threads mit höherer Priorität gibt, die jedoch nicht ausgeführt werden können, wird es eine weitere Runde geben.
In Multicore- / Multiprozessorsystemen kann es Einschränkungen geben, auf welchen Kernen ein Thread ausgeführt werden kann. Das System versucht außerdem, Threads auf ihrem idealen Kern und innerhalb ihres NUMA-Knotens zu belassen, sodass sich die Daten des Threads wahrscheinlich noch im Cache dieses Kerns befinden und schnell auf die von ihm erstellten Daten zugreifen können. Threads werden weiterhin auf nicht idealen Kernen ausgeführt, wenn keine Auswahl für die nächste Ausführung besteht.
Das System verwendet verschiedene dynamische Prioritätserhöhungen und dynamische Quantengrößen, damit die Vordergrundanwendung mehr Zeit (wenn sie benötigt wird) als Hintergrundprozesse erhält und Prozesse schnell reagieren können, wenn E / A-Vorgänge abgeschlossen sind (einschließlich Maus, Tastatur und Touchscreen-Eingabe). Darüber hinaus wird die 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 auch ein Thread mit mittlerer Priorität ausgeführt wird, wird der Thread mit niedriger Priorität während der Prozessorzeit ausgehungert, und der Thread mit hoher Priorität wird gestoppt. Daher wird der Thread mit niedriger Priorität vorübergehend auf die höhere Priorität angehoben, sodass Zeit und hoffentlich die für den Thread mit hoher Priorität erforderliche Ressource freigegeben werden.
Vor Windows Vista hatte die Thread-Priorität keine Auswirkung darauf, wie schnell E / A-Vorgänge abgeschlossen wurden. Seit Windows Vista können E / As auch eine Priorität haben, die standardmäßig von der Thread-Priorität stammt.
Zusammenfassung: Wenn Ihre CPU nicht stark ausgelastet ist, werden Sie beim Ändern der Thread-Prioritäten im Wesentlichen keine Auswirkungen feststellen, und selbst dann ist der Effekt in der Regel minimal. Wenn der Prozess auf E / A warten muss oder nicht mit anderen Prozessen um die CPU-Zeit konkurriert, wird er bereits mit der schnellsten Geschwindigkeit ausgeführt und durch Ändern der Priorität wird er nicht schneller.