Définition de la priorité des tâches parallèles

Aide LabVIEW 2014

Date d'édition : June 2014

Numéro de référence : 371361L-0114

»Afficher les infos sur le produit
Télécharger l'aide (Windows uniquement)

Vous pouvez octroyer une priorité aux tâches parallèles en utilisant les fonctions Attendre (ms) de manière stratégique ou en changeant le paramètre de priorité dans la Catégorie Exécution de la boîte de dialogue Propriétés du VI.

Dans la plupart des cas, vous devriez garder la priorité par défaut des VIs. Vous risquez de ne pas obtenir les résultats espérés si vous utilisez les priorités pour contrôler l'ordre d'exécution. En cas de mauvaise utilisation, les tâches qui ont la priorité la plus faible risquent d'être complètement mises à l'écart. Si les tâches à priorité plus élevée sont conçues pour s'exécuter longtemps, les tâches à faible priorité ne s'exécuteront que si la tâche à priorité plus élevée attend régulièrement.

Utilisation de fonctions Attendre

Vous pouvez utiliser la fonction Attendre pour que les tâches moins importantes s'exécutent moins fréquemment. Par exemple, s'il y a plusieurs boucles parallèles et que vous voulez que certaines s'exécutent plus souvent que les autres, utilisez des fonctions Attendre pour les tâches à plus faible priorité. Ceci donne plus de temps aux autres tâches. Dans beaucoup de cas, il suffit d'utiliser des fonctions Attendre. Il est probable que vous n'aurez pas besoin de changer les priorités en sélectionnant Fichier»Propriétés du VI, puis Exécution dans la boîte de dialogue Propriétés du VI.

Comme décrit dans la section Nœuds synchrones/bloquants, si un diagramme attend, l'ordinateur le retire de la file d'attente pour que les autres tâches puissent s'exécuter.

Les fonctions Attendre sont tout particulièrement utiles pour les boucles qui interrogent l'interface utilisateur. Une attente de 100 à 200 ms se remarque à peine, mais elle permet à l'application de traiter les autres tâches plus efficacement. De plus, l'attente libère le système d'exploitation et lui permet de consacrer plus de temps aux autres threads ou applications. Pensez à ajouter des attentes aux sections les moins critiques du diagramme pour qu'il y ait davantage de temps pour les tâches à faible priorité.

Si vous utilisez la fonction Attendre (ms), LabVIEW attend pendant la durée de temps que vous spécifiez. Si vous utilisez la fonction Attendre un multiple de ms, LabVIEW surveille un compteur de millisecondes et attend que ce compteur atteigne un multiple du nombre que vous avez spécifié.

Changement des priorités

Vous pouvez aussi changer la priorité d'un VI en sélectionnant Fichier»Propriétés du VI, puis Exécution dans la boîte de dialogue de Propriétés du VI. Vous pouvez sélectionner les niveaux de priorité suivants, répertoriés du niveau le plus bas au plus haut :

  • Priorité d'arrière-plan (la plus faible)
  • Priorité normale
  • Priorité normale supérieure
  • Priorité haute
  • Priorité critique (la plus haute)
  • Sous-programme

Le comportement des cinq premières priorités est identique, mais la priorité sous-programme a des caractéristiques supplémentaires. Les deux sections suivantes sont valides pour toutes ces priorités, mis à part la priorité sous-programme.

Priorités dans le système d'exécution interface utilisateur

Dans le système d'exécution interface utilisateur des applications multithread, la file d'attente du système d'exécution a plusieurs points d'entrée. Le système d'exécution place les VIs à priorité plus élevée devant les VIs à priorité plus faible dans la file d'attente. Si une tâche à priorité élevée s'exécute alors que la file d'attente ne contient que des tâches à priorité plus faible, le VI à priorité élevée continue son exécution. Par exemple, si la file d'attente d'exécution contient deux VIs pour chaque niveau de priorité, les VIs à priorité critique se partagent tout le temps d'exécution jusqu'à ce qu'ils se terminent. À partir de ce moment-là, les VIs à priorité haute se partagent le temps d'exécution jusqu'à ce qu'ils se terminent à leur tour, et ainsi de suite. Toutefois, si les VIs à priorité plus élevée appellent une fonction qui attend, le système d'exécution les retire de la file d'attente jusqu'à ce que l'attente ou les E/S soient terminées, et désigne quelles autres tâches (qui peuvent avoir une priorité plus faible) peuvent s'exécuter. Lorsque l'attente ou les E/S sont terminées, le système d'exécution réinsère la tâche qui était en attente dans la file devant les tâches à priorité plus faible.

De plus, si un VI à priorité haute appelle un sous-VI à priorité inférieure, ce sous-VI hérite de la priorité la plus haute de tous les VIs qui l'appellent, même si ce VI-là n'est pas en cours d'exécution. Par conséquent, vous n'avez pas besoin de changer les niveaux de priorité des sous-VIs appelés par un VI pour monter le niveau de priorité de ce sous-VI.

Priorités dans les autres systèmes d'exécution et les applications multithread

Chaque système d'exécution a un système d'exécution différent pour chaque niveau de priorité, mis à part le niveau de priorité sous-programme et le système d'exécution interface utilisateur. Ces systèmes d'exécution à priorité ont chacun leur propre file d'attente et deux threads dédiés à la gestion des diagrammes de cette file d'attente.

Au lieu de six systèmes d'exécution, il y en a donc un pour le système interface utilisateur (qui ne dépend pas de la priorité) et 25 pour les autres systèmes (cinq niveaux de priorité pour chacun des cinq systèmes d'exécution).

Le système d'exploitation attribue des niveaux de priorité de système d'exploitation aux threads de tous ces systèmes d'exécution en fonction de la classification. Par conséquent, dans une exécution typique, les tâches à priorité plus élevée disposent de plus de temps que les tâches à priorité plus faible. Tout comme les priorités du système d'exécution interface utilisateur, les tâches à priorité plus faible ne s'exécutent que si la tâche à priorité plus élevée attend régulièrement.

Certains systèmes d'exploitation essaient d'éviter ce problème en montant régulièrement le niveau de priorité des tâches à priorité plus faible. Sur ces systèmes d'exploitation, les tâches à priorité plus faible ont la possibilité de s'exécuter même si une tâche à haute priorité veut s'exécuter en continu. Cependant, ce comportement varie d'un système d'exploitation à l'autre. Sur certains systèmes d'exploitation, vous pouvez régler ce comportement et les propriétés des tâches.

Le système d'exécution interface utilisateur n'a qu'un thread. Le thread d'interface utilisateur utilise la propriété normale des autres systèmes d'exécution. Par conséquent, si vous configurez un VI pour qu'il s'exécute dans le système d'exécution standard avec la priorité normale supérieure, le système d'exécution interface utilisateur risque de ne pas s'exécuter, et l'interface utilisateur sera lente ou ne réagira pas. De même, si vous configurez un VI pour qu'il s'exécute avec la priorité d'arrière-plan, il s'exécute avec une priorité plus faible que le système d'exécution interface utilisateur.

Comme décrit plus haut, si un VI appelle un sous-VI à priorité plus faible, la priorité de ce sous-VI passe au même niveau que le VI qui l'a appelé pour la durée de cet appel.

Niveau de priorité sous-programme

Le niveau de priorité sous-programme permet à un VI de s'exécuter aussi efficacement que possible. Les VIs auxquels vous attribuez la priorité sous-programme ne partagent pas le temps d'exécution avec les autres VIs.

Lorsqu'un VI s'exécute au niveau de priorité sous-programme, il prend contrôle du thread sur lequel il s'exécute, qui est le thread utilisé par le VI qui l'appelle. Aucun autre VI ne peut s'exécuter dans ce thread tant que le VI de priorité sous-programme n'a pas fini de s'exécuter, même si l'autre VI a aussi le niveau de priorité sous-programme. Dans les applications monothread, aucun autre VI ne s'exécute. Dans les systèmes d'exécution, le thread qui exécute le sous-programme ne traite pas d'autres VIs, mais le deuxième thread de ce système d'exécution, ainsi que les autres systèmes d'exécution, peuvent continuer à exécuter des VIs.

Non seulement l'exécution d'un VI à priorité sous-programme ne partage pas le temps avec d'autres VIs, mais elle est aussi optimisée de sorte que les commandes et les indicateurs de la face-avant ne sont pas mis à jour quand le sous-programme est appelé. La face-avant d'un VI à priorité sous-programme ne révèle rien de son exécution.

Un VI à priorité sous-programme peut appeler d'autres VIs à priorité sous-programme, mais il ne peut pas appeler un VI ayant une autre priorité. Utilisez le niveau de priorité sous-programme dans les cas où vous voulez minimiser le temps système d'un sous-VI qui effectue des calculs simples.

De plus, comme les sous-programmes ne sont pas conçus pour interagir avec la file d'attente d'exécution, ils ne peuvent pas appeler de fonction qui forcerait LabVIEW à les retirer de la file d'attente. Plus précisément, ils ne peuvent pas appeler les fonctions Attendre, GPIB, VISA et Boîte de dialogue.

Les sous-programmes ont des fonctionnalités supplémentaires qui sont utiles pour les applications critiques. Si vous cliquez avec le bouton droit sur un sous-VI et que vous sélectionnez Ignorer l'appel au sous-programme si occupé dans le menu local, le système d'exécution saute l'appel si le sous-programme est en train de s'exécuter dans un autre thread. Ceci peut être utile dans les boucles critiques où le système d'exécution saute les opérations effectuées par le sous-programme et où vous voulez éviter d'attendre que le sous-VI se termine. Si vous sautez l'exécution d'un sous-VI, toutes les sorties du sous-VI prennent la valeur par défaut de l'indicateur sur la face-avant du sous-VI.

CET ARTICLE VOUS A-T-IL ÉTÉ UTILE ?

Pas utile