web-dev-qa-db-fra.com

A quoi sert la définition des priorités du processus "temps réel"?

D'après ce que j'ai lu dans le passé, vous êtes encouragé à ne pas modifier la priorité de vos applications Windows par programmation, et si vous le faites, vous ne devriez jamais les changer en "Temps réel".

Que fait la définition des priorités du processus "Temps réel" par rapport à "Elevé" et "Supérieur à la normale"?enter image description hereenter image description here

64
Chris S

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

La création de threads de priorité en temps réel nécessite un privilège ( SeIncreaseBasePriorityPrivilege ). Cette opération ne peut donc être effectuée que par des utilisateurs administratifs.

Pour Vista et les versions ultérieures, l'une des options des applications nécessitant une exécution en priorité temps réel consiste à utiliser Multimedia Class Scheduler Service (MMCSS) et à le laisser gérer la priorité de vos threads. Le MMCSS empêchera votre application d’utiliser trop de temps de calcul, vous évitant ainsi de vous inquiéter de la mise en réservoir de la machine.

76
Larry Osterman

Simplement, la classe de priorité "Temps réel" est supérieure à la classe de priorité "Elevée". Je ne pense pas qu'il y a beaucoup plus que cela. Oh oui - vous devez avoir le SeIncreaseBasePriorityPrivilege pour mettre un fil dans la classe Real Time.

Windows augmente parfois la priorité d'un thread pour diverses raisons, mais cela n'augmentera pas la priorité d'un thread dans une autre classe de priorité. Cela n'augmentera pas non plus la priorité des threads de la classe de priorité en temps réel. Ainsi, un thread hautement prioritaire ne bénéficiera d'aucun boost temporaire temporaire dans la classe de priorité Real Time.

Le chapitre "Inside Windows" de Russinovich sur la façon dont Windows gère les priorités est une excellente ressource pour apprendre comment cela fonctionne:

Notez qu'il n'y a 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 s'exécutant sur des ordinateurs dédicés. J'imagine que les pilotes multimédia et/ou les processus peuvent nécessiter des threads avec une priorité en temps réel. Cependant, un tel thread ne devrait pas nécessiter beaucoup de ressources processeur - il devrait bloquer la plupart du temps afin que les événements système normaux puissent être traités.

24
Michael Burr

Il s'agirait du paramètre de priorité disponible le plus élevé, qui 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 fils du clavier et de la souris deviennent affamés au point qu’ils ne répondent plus.

Donc, fondamentalement, si vous devez demander, ne l'utilisez pas :)

16
Eric Petroelje

Le temps réel est la classe la plus prioritaire disponible pour un processus. Par conséquent, il diffère de "Élevé" en ce sens que c'est un pas de plus et "Au-dessus de la normale" en ce sens que c'est deux pas de plus.

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

La priorité de processus de la classe augmente ou diminue toutes les priorités de thread effectives du processus et est donc considérée comme la "priorité de base".

Donc, un processus a:

  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 impérativement préempter les autres processus en cours d'exécution, il existe un privilège de sécurité spécial pour se protéger contre toute utilisation anarchique de celui-ci. Ceci est défini par la politique de sécurité.

Sous NT6 + (Vista +), l'utilisation du planificateur de classes multimédias Vista est le moyen approprié pour réaliser des opérations en temps réel dans ce qui est et non un système d'exploitation en temps réel. . La plupart du temps, cela fonctionne, même si ce n’est pas parfait, car le système d’exploitation n’est pas conçu pour les opérations en temps réel.

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

2
dyasta

Une fois que Windows a appris qu'un programme utilise une priorité supérieure à la normale, il semble que cela limite la priorité du processus.

Définir la priorité de IDLE à REALTIME ne modifie PAS l'utilisation de la CPU.

J'ai découvert sur mon processeur AMD multiprocesseur que, si j'abandonnais l'un des processeurs, comme le dernier, l'utilisation du processeur serait MAX OUT et le dernier processeur resterait inactif. La vitesse du processeur augmente à 75% sur mon Quad AMD.

Utilisez le Gestionnaire de tâches -> sélectionnez le processus -> Cliquez avec le bouton droit sur le processus -> Sélectionnez -> Définissez l'affinité Cliquez sur tout sauf sur le dernier processeur. L'utilisation du processeur augmentera jusqu'à atteindre le MAX sur les processeurs restants et le nombre d'images par seconde si le traitement de la vidéo augmente.

1
wizkid18

Il est fondamentalement plus élevé/supérieur dans tout le reste. 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.

0
Cheaty Hotbeef

Comme toutes les autres réponses avant le temps réel, ce programme est classé en priorité absolue. Rien n'est traité tant que ce programme n'a pas été traité.
Sur ma machine Pentium 4, j’ai beaucoup paramétré Minecraft en temps réel, car il améliore considérablement les performances du jeu et le système semble parfaitement stable. donc, le temps réel n’est pas aussi mauvais qu’il ne le semble, juste si vous avez un ensemble multi-cœur, l’affinité d’un programme avec un noyau ou des cœurs spécifiques (mais pas tous, juste pour que tout le reste puisse fonctionner en temps réel définir les programmes se bloque) et définir la priorité en temps réel.

0
Sam Hook