Multitâche dans LabVIEW

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)

LabVIEW utilise le multithread préemptif et coopératif. Les systèmes d'exploitation et les processeurs qui disposent du multithreading préemptif utilisent un nombre limité de threads, de sorte que dans certains cas, ces systèmes reviennent à l'utilisation du multithreading coopératif.

Le système d'exécution exécute les VIs en mode multitâche préemptif en utilisant des threads. Cependant, le nombre de threads disponibles est limité. Pour les applications fortement parallèles, le système d'exécution utilise le multitâche coopératif si les threads disponibles sont occupés. De plus, le système d'exploitation gère le multitâche préemptif entre l'application et les autres tâches.

Système d'exécution de base

Le système d'exécution de base maintient une file d'attente pour les tâches actives. Par exemple, si vous avez trois boucles qui s'exécutent en parallèle, à tout moment une tâche est en cours d'exécution et les deux autres attendent dans la file. En supposant que toutes les tâches ont la même priorité, l'une des tâches s'exécute pendant un certain temps. Puis cette tâche va à la fin de la file d'attente, et la tâche suivante s'exécute. Lorsqu'une tâche est terminée, le système d'exécution la supprime de la file d'attente.

Le système d'exécution exécute le premier élément de la file en appelant le code généré du VI. À un moment donné, le code généré de ce VI vérifie auprès du système d'exécution si ce dernier a désigné une autre tâche pour l'exécution. Si ce n'est pas le cas, le VI continue à s'exécuter.

Nœuds synchrones/bloquants

Quelques nœuds ou éléments du diagramme sont synchrones, ce qui signifie qu'ils ne s'exécutent pas en mode multitâche avec les autres nœuds. Dans une application multithread, ils s'exécutent complètement, si bien que le thread dans lequel ils s'exécutent est monopolisé jusqu'à ce que la tâche soit terminée.

Les nœuds de propriété et lesnœuds de méthode, utilisés sur les références de commande ou d'application, se synchronisent sur le thread d'interface utilisateur, même pour la propriété valeur d'une référence de commande. Par conséquent, si le thread interface utilisateur est occupé, comme par exemple, par l'affichage d'une grande quantité de données dans un graphe, le nœud de propriété et le nœud de méthode ne s'exécutera pas jusqu'à ce que ce thread ait terminé sa tâche en cours.

Les appels de bibliothèques partagées et les fonctions de calcul s'exécutent de manière synchrone. La plupart des VIs d'analyse et d'acquisition de données contiennent des appels de bibliothèques partagées et s'exécutent donc de manière synchrone. Pour qu'un seul thread puisse appeler une bibliothèque partagée à la fois, configurez un seul VI non réentrant pour appeler la bibliothèque partagée. Si la bibliothèque partagée est appelée par plusieurs VIs non réentrants, LabVIEW peut produire des résultats inattendus.

Presque tous les autres nœuds sont asynchrones. Par exemple, les structures, les fonctions d'E/S, les fonctions de synchronisation et les sous-VIs s'exécutent de manière asynchrone.

La fonction Attendre une occurrence et les VIs et fonctions des palettes Informations temporelles, GPIB, VISA et Série attendent que la tâche soit terminée, mais peuvent le faire sans monopoliser le thread. Le système d'exécution retirent ces tâches de la file d'attente jusqu'à ce que leur tâche soit terminée. Lorsque la tâche est terminée, le système d'exécution la place à la fin de la file d'attente. Par exemple, lorsque l'utilisateur clique sur un bouton dans une boîte de dialogue affichée par le VI Boîte de dialogue à trois boutons, le système d'exécution place la tâche à la fin de la file d'attente.

Impasse

Vous pouvez arriver à une impasse si plusieurs tâches sont incapables de se terminer car elles sont en compétition pour les mêmes ressources système. Exemple d'impasse : deux applications qui doivent imprimer un fichier. La première application, qui s'exécute dans le thread 1, acquiert le fichier et en verrouille l'accès pour les autres applications. La seconde application, dans le thread 2, en fait de même avec l'imprimante. Dans un environnement non-préemptif, où le système d'exploitation n'intervient pas pour libérer une ressource, les deux applications attendent que l'autre libère une ressource, mais aucune ne libère la ressource qu'elle contrôle. Vous pouvez éviter les impasses en configurant les VIs de sorte qu'ils accèdent aux ressources communes dans le même ordre.

Gestion de l'interface utilisateur dans le système d'exécution

Mise à part l'exécution des VIs, le système d'exécution doit aussi coordonner l'interaction avec l'interface utilisateur. Lorsque vous cliquez sur un bouton, que vous déplacez une fenêtre ou que vous changez la valeur d'une commande à glissière, le système d'exécution gère cette activité et assure que le VI continue à s'exécuter en arrière-plan.

Le système d'exécution monothread s'exécute en mode multitâche en alternant entre la réponse aux actions de l'utilisateur et l'exécution des VIs. Le système d'exécution vérifie s'il doit gérer des événements de l'interface utilisateur. Si ce n'est pas le cas, le système d'exécution retourne au VI ou accepte la tâche suivante de la file d'attente.

Lorsque vous cliquez sur des boutons ou sur des menus déroulants, l'action que vous déclenchez peut prendre un certain temps à se réaliser car LabVIEW exécute des VIs en arrière-plan. LabVIEW alterne entre la réponse à vos actions sur la commande ou le menu, et l'exécution des VIs.

Systèmes d'exécution dans LabVIEW

LabVIEW dispose de six systèmes d'exécution multiples que vous pouvez assigner en sélectionnant Fichier»Propriétés du VI, puis Exécution dans la boîte de dialogue Propriétés du VI. Vous pouvez sélectionner les systèmes d'exécution suivants :

  • interface utilisateur — Gère l'interface utilisateur. Son comportement est le même que ce soit pour les applications multithread que pour les applications monothread. Les VIs peuvent s'exécuter sur le thread d'interface utilisateur, mais le système d'exécution alterne entre le multitâche coopératif et les réponses aux événements de l'interface utilisateur.
  • standard — S'exécute dans d'autres threads que l'interface utilisateur.
  • E/S d'instruments — Empêche VISA, GPIB et E/S série d'interférer avec les autres VIs.
  • acquisition de données — Empêche l'acquisition de données d'interférer avec les autres VIs.
  • autre 1 et autre 2 — Disponibles si certaines tâches de l'application requièrent leur propre thread.
  • identique à l'appelant — Pour les sous-VIs, s'exécute dans le même système d'exécution que le VI qui a appelé le sous-VI. Pour les VIs de niveau principal, identique à l'appelant produit le même effet que définir le système d'exécution privilégié sur standard.

Ces systèmes d'exécution fournissent des partitions brutes pour les VIs qui doivent s'exécuter indépendamment des autres VIs. Par défaut, les VIs s'exécutent dans le système d'exécution standard.

Les noms E/S d'instruments et Acquisition de données sont des suggestions pour le type de tâches à placer dans ces systèmes d'exécution. Les E/S et l'acquisition de données sont possibles dans les autres systèmes, mais vous pouvez utiliser ces noms pour partitionner l'application et comprendre l'organisation.

Les systèmes d'exécution ne gèrent pas l'interface utilisateur. Si un VI d'un de ces systèmes d'exécution a besoin de mettre à jour une commande, le système d'exécution en donne la responsabilité au système d'exécution interface utilisateur. Assignez le système d'exécution interface utilisateur aux VIs qui comportent un grand nombre de nœuds de propriété.

LabVIEW alloue un nombre de threads proportionnel au nombre de processeurs de la machine. Chaque thread gère une tâche. Par exemple, si un VI appelle une bibliothèque partagée, l'autre thread continue à exécuter les autres VIs de ce système d'exécution. Comme chaque système d'exécution a un nombre limité de threads, les tâches restent en attente si les threads sont occupés.

Même si les VIs que vous écrivez s'exécutent correctement dans le système d'exécution standard, envisagez d'utiliser un autre système d'exécution. Par exemple, si vous développez des drivers d'instruments, vous pourriez utiliser le système d'exécution E/S d'instruments.

Même si vous utilisez le système d'exécution standard, l'interface utilisateur a toujours son propre thread. Toutes les activités menées sur l'interface utilisateur, comme le tracé sur la face-avant, les réponses aux clics de souris, etc., s'effectuent sans perturber l'exécution du code du diagramme. De même, l'exécution d'un long programme de calcul n'empêche pas l'interface utilisateur de répondre aux clics de souris et aux entrées de données avec le clavier.

Les ordinateurs à plusieurs processeurs bénéficient encore plus du multithreading. Sur un ordinateur à un processeur, le système d'exploitation a priorité sur les threads et distribue le temps entre les threads du processeur. Sur un multiprocesseur, les threads peuvent s'exécuter simultanément sur les divers processeurs, de sorte que plusieurs activités peuvent avoir lieu en même temps.

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

Pas utile