Boosts prioritaires
Chaque thread a une priorité dynamique . Il s’agit de la priorité utilisée par le planificateur pour déterminer le thread à exécuter. Initialement, la priorité dynamique d’un thread est la même que sa priorité de base. Le système peut augmenter et réduire la priorité dynamique pour s’assurer qu’il est réactif et qu’aucun thread n’est affamé pour le temps processeur. Le système n’améliore pas la priorité des threads avec un niveau de priorité de base compris entre 16 et 31. Seuls les threads ayant une priorité de base comprise entre 0 et 15 reçoivent des améliorations de priorité dynamique.
Le système améliore la priorité dynamique d’un thread pour améliorer sa réactivité comme suit.
Lorsqu’un processus qui utilise NORMAL_PRIORITY_CLASS est placé au premier plan, le planificateur améliore la classe de priorité du processus associé à la fenêtre de premier plan, de sorte qu’il soit supérieur ou égal à la classe de priorité de tous les processus en arrière-plan. La classe de priorité retourne à son paramètre d’origine lorsque le processus n’est plus au premier plan.
Lorsqu’une fenêtre reçoit une entrée, telle que les messages du minuteur, les messages de souris ou l’entrée clavier, le planificateur augmente la priorité du thread propriétaire de la fenêtre.
Lorsque les conditions d’attente d’un thread bloqué sont satisfaites, le planificateur améliore la priorité du thread. Par exemple, lorsqu’une opération d’attente associée à un disque ou à un clavier d’E/S se termine, le thread reçoit un boost de priorité.
Vous pouvez désactiver la fonctionnalité d’amélioration de priorité en appelant la fonctionSetProcessPriorityBoostou fonction SetThreadPriorityBoost. Pour déterminer si cette fonctionnalité a été désactivée, appelez la fonctionGetProcessPriorityBoostou fonction GetThreadPriorityBoost.
Après avoir levé la priorité dynamique d’un thread, le planificateur réduit cette priorité d’un niveau chaque fois que le thread termine une tranche de temps, jusqu’à ce que le thread revient à sa priorité de base. La priorité dynamique d’un thread n’est jamais inférieure à sa priorité de base.