Priority Boosts

Chaque thread a une priorité dynamique. Il s’agit de la priorité que le planificateur utilise 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 privé de temps processeur. Le système n’améliore pas la priorité des threads dont le niveau de priorité de base est compris entre 16 et 31. Seuls les threads dont la priorité de base est comprise entre 0 et 15 reçoivent des améliorations de priorité dynamique.

Le système renforce la priorité dynamique d’un thread pour améliorer sa réactivité comme suit.

  • Lorsqu’un processus qui utilise NORMAL_PRIORITY_CLASS est mis au premier plan, le planificateur augmente la classe de priorité du processus associé à la fenêtre de premier plan, de sorte qu’elle soit supérieure ou égale à la classe de priorité de tous les processus en arrière-plan. La classe de priorité revient à son paramètre d’origine lorsque le processus n’est plus au premier plan.

  • Lorsqu’une fenêtre reçoit des entrées, telles que des messages de minuteur, des messages de souris ou une entrée au clavier, le planificateur augmente la priorité du thread qui possède la fenêtre.

  • Lorsque les conditions d’attente d’un thread bloqué sont satisfaites, le planificateur augmente la priorité du thread. Par exemple, lorsqu’une opération d’attente associée aux E/S du disque ou du clavier se termine, le thread reçoit une augmentation de priorité.

    Vous pouvez désactiver la fonctionnalité de renforcement des priorités en appelant la fonction SetProcessPriorityBoost ou SetThreadPriorityBoost . Pour déterminer si cette fonctionnalité a été désactivée, appelez la fonction GetProcessPriorityBoost ou GetThreadPriorityBoost .

Après avoir déclenché 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 retombe à sa priorité de base. La priorité dynamique d’un thread n’est jamais inférieure à sa priorité de base.