Quel est le paramètre de priorité du processus “temps réel”?

D’après ce que j’ai lu dans le passé, nous vous encourageons à ne pas modifier la priorité de vos applications Windows par programmation, et si vous le faites, vous ne devriez jamais les modifier en «temps réel».

Que fait le paramétrage de priorité de processus «temps réel» par rapport à «Élevé» et «Au-dessus de la normale»?

Un thread de priorité en temps réel ne peut jamais être préempté par des interruptions de temporisation et s’exécute à une priorité plus élevée que tout autre thread du système. En tant que tel, un thread de priorité en temps réel lié au processeur peut totalement détruire une machine.

La création de threads prioritaires en temps réel nécessite un privilège ( SeIncreaseBasePriorityPrivilege ), qui ne peut donc être effectué que par des utilisateurs administratifs.

Pour Vista et au-delà, une option pour les applications nécessitant leur exécution en temps réel consiste à utiliser le service MMCSS ( Multimedia Class Scheduler Service ) et à le laisser gérer la priorité de vos threads. Le MMCSS empêchera votre application d’utiliser trop de temps CPU, vous n’aurez donc pas à vous soucier du remplissage de la machine.

Simplement, la classe de priorité “Real Time” est supérieure à la classe de priorité “High”. Je ne pense pas que ce soit beaucoup plus que cela. Oh oui – il faut avoir le SeIncreaseBasePriorityPrivilege pour placer un thread dans la classe Real Time.

Windows augmentera parfois la priorité d’un thread pour diverses raisons, mais cela n’améliorera pas la priorité d’un thread dans une autre classe de priorité. Cela n’améliorera pas non plus la priorité des threads dans la classe de priorité en temps réel. Ainsi, un thread de haute priorité n’obtiendra aucun boost temporaire automatique dans la classe de priorité en temps réel.

Le chapitre “Inside Windows” de Russinovich sur la manière dont Windows gère les priorités est une excellente ressource pour apprendre comment cela fonctionne:

Notez qu’il n’ya absolument aucun problème avec un thread ayant une priorité en temps réel sur un système Windows normal – ils ne sont pas nécessairement destinés à des processus spéciaux exécutés sur des machines dédicacées. J’imagine que les pilotes et / ou processus multimédia peuvent avoir besoin de threads avec une priorité en temps réel. Cependant, un tel thread ne devrait pas nécessiter beaucoup de CPU – il devrait être bloqué la plupart du temps pour que les événements système normaux obtiennent un traitement.

Ce serait le paramètre de priorité le plus élevé disponible et ne serait généralement utilisé que sur une boîte dédiée à l’exécution de ce programme spécifique. En fait, il est suffisamment élevé pour que les threads du clavier et de la souris ne puissent plus répondre.

Donc, fondamentalement, si vous devez demander, ne l’utilisez pas 🙂

Le temps réel est la classe la plus prioritaire disponible pour un processus. Par conséquent, il est différent de «élevé» en ce sens qu’il fait un pas de plus et «supérieur à la normale» en ce sens qu’il fait deux pas plus.

De même, le temps réel est également un niveau de priorité de thread.

La classe de priorité de processus augmente ou diminue toutes les priorités de threads effectives dans le processus et est donc considérée comme la «priorité de base».

Ainsi, un processus a un:

  1. Classe de priorité du processus de base .
  2. Priorités de threads individuelles , décalages de la classe de priorité de base.

Étant donné que le temps réel est censé être réservé aux applications qui doivent absolument préempter les autres processus en cours, il existe un privilège de sécurité spécial permettant de le protéger contre toute utilisation involontaire. Ceci est défini par la politique de sécurité.

Dans NT6 + (Vista +), l’utilisation de Vista Multimedia Class Scheduler est le moyen approprié pour réaliser des opérations en temps réel dans ce qui n’est pas un système d’exploitation en temps réel. Cela fonctionne, pour la plupart, bien que ce ne soit pas parfait puisque le système d’exploitation n’est pas conçu pour des opérations en temps réel.

Microsoft considère cette priorité très dangereuse, à juste titre. Aucune application ne devrait l’utiliser sauf dans des circonstances très spécialisées, et même essayer de limiter son utilisation à des besoins temporaires.

Une fois que Windows apprend qu’un programme utilise une priorité supérieure à la normale, il semble que cela limite la priorité sur le processus.

La définition de la priorité d’IDLE à REALTIME ne modifie PAS l’utilisation du processeur.

J’ai trouvé sur mon processeur AMD multiprocesseur que si je laisse tomber l’un des processeurs comme le dernier, l’utilisation du processeur est MAX OUT et le dernier processeur rest inactif. La vitesse du processeur augmente à 75% sur mon Quad AMD.

Utilisez le Gestionnaire des tâches-> Sélectionnez le processus-> Clic droit sur le processus-> Sélectionnez-> Définir l’affinité Cliquez sur tout sauf le dernier processeur. L’utilisation du processeur augmentera à MAX sur les processeurs restants et le nombre d’images si le traitement vidéo augmentera.

Il est fondamentalement plus haut / plus grand dans tout le rest. Un clavier est moins prioritaire que le processus en temps réel. Cela signifie que le processus sera pris en compte plus rapidement que le clavier et s’il ne peut pas gérer cela, votre clavier est ralenti.

Comme toutes les autres réponses avant que le temps réel ne donne à ce programme la priorité absolue. Rien n’est traité tant que ce programme n’a pas été traité.
Sur ma machine Pentium 4, je mets beaucoup de temps à minecraft car cela augmente beaucoup les performances du jeu et le système semble complètement stable. Le temps réel n’est donc pas aussi mauvais qu’il n’y paraît, si vous avez un multi-core, définissez l’affinité d’un programme pour un cœur ou des cœurs spécifiques (mais pas tous, juste pour que tout le rest puisse être exécuté en temps réel) définir des programmes est raccroché) et définir la priorité en temps réel.