La priorité n'a d'importance que s'il y a plus de threads exécutables que de cœurs CPU disponibles. Lorsque cela se produit, la priorité contrôle les threads à exécuter. Dans la plupart des systèmes, il n'y a pas assez de calcul pour tout conflit sur le CPU: les threads sont tous bloqués , en attendant que quelque chose se produise. Cela peut vous attendre pour taper quelque chose, déplacer la souris, toucher l'écran ou pour que des données arrivent du disque, du réseau, d'un autre appareil que vous avez branché ou qu'un autre thread finisse de travailler sur des données critiques structure. Il peut être en attente qu'une partie du programme soit lue à partir du disque ou d'une mémoire qui a été échangée pour être relue, plutôt que de lire explicitement un fichier.
Sous Windows, le planificateur conserve une file d' attente de threads exécutables à chaque niveau de priorité. Quand il prend une décision de planification - soit qu'un thread a épuisé son quantum (temps autorisé avant que quelque chose d'autre ne doive s'exécuter), ce qui signifie qu'un autre thread devrait avoir un tour, ou le thread s'est bloqué et n'est plus exécutable, ou une priorité plus élevée le thread est devenu débloqué - le prochain thread dans la file d'attente au niveau de priorité supérieur avec tous les threads exécutables sera planifié. Si le thread en cours d'exécution a utilisé son quantum, il est placé à la fin de la file d'attente. Si c'est le seul thread à son niveau de priorité qui est exécutable, et qu'il n'y a aucun autre thread exécutable de priorité plus élevée, mais qui ne s'exécute pas, il obtiendra un autre tour.
Dans les systèmes multicœurs / multiprocesseurs, il peut y avoir des restrictions sur les cœurs sur lesquels un thread peut s'exécuter. En outre, le système essaie de conserver les threads sur leur noyau idéal et dans leur nœud NUMA afin que les données du thread soient toujours dans le cache de ce noyau et qu'il ait un accès rapide aux données qu'il a créées. Les threads seront toujours exécutés sur des cœurs non idéaux s'il n'y a pas de choix sur quoi exécuter ensuite.
Le système utilise divers boosts de priorité dynamique et tailles quantiques dynamiques afin que l'application de premier plan ait plus de temps (si elle en a besoin) que les processus d'arrière-plan, et que les processus puissent réagir rapidement lorsque les opérations d'E / S sont terminées (y compris la souris, le clavier et écran tactile). De plus, l'augmentation de priorité est utilisée pour contourner les inversions de priorité, où un thread de haute priorité attend une ressource qu'un thread de faible priorité détient actuellement. Si un thread de priorité moyenne est également en cours d'exécution, il affamera le thread de faible priorité du temps du processeur, ce qui maintiendra le thread de haute priorité. Ainsi, le thread à faible priorité est temporairement augmenté à la priorité la plus élevée, ce qui lui donne du temps et, espérons-le, libère la ressource dont le thread à haute priorité a besoin.
Avant Windows Vista, la priorité des threads n'avait aucun effet sur la rapidité d'exécution des opérations d'E / S. Depuis Windows Vista, les E / S peuvent également avoir une priorité, qui provient par défaut de la priorité du thread.
Résumé: vous ne verrez en grande partie aucun effet de la modification des priorités des threads, sauf si votre processeur est lourdement chargé, et même alors, l'effet sera généralement minime. Si le processus doit attendre les E / S ou s'il n'est pas en concurrence avec d'autres processus pour le temps CPU, il s'exécute déjà le plus rapidement possible et le changement de priorité ne va pas le rendre plus rapide.