Avantages des unités d'exécution

Les programmes à unités d'exécution multiples peuvent améliorer les performances par rapport aux programmes parallèles traditionnels qui utilisent plusieurs processus. En outre, des performances améliorées peuvent être obtenues sur des systèmes multiprocesseurs à l'aide d'unités d'exécution.

Gestion des unités d'exécution

La gestion des unités d'exécution, c'est-à-dire la création d'unités d'exécution et le contrôle de leur exécution, nécessite moins de ressources système que la gestion des processus. La création d'une unité d'exécution, par exemple, nécessite uniquement l'allocation de la zone de données privée de l'unité d'exécution, généralement 64 Ko, et deux appels système. La création d'un processus est beaucoup plus coûteuse, car l'ensemble de l'espace d'adressage du processus parent est dupliqué.

L'API de bibliothèque d'unités d'exécution est également plus facile à utiliser que la bibliothèque pour la gestion des processus. La création d'unité d'exécution requiert uniquement la sous-routine pthread_create .

Communications entre unités d'exécution

La communication entre les unités d'exécution est beaucoup plus efficace et plus facile à utiliser que la communication entre les processus. Etant donné que toutes les unités d'exécution d'un processus partagent le même espace adresse, elles n'ont pas besoin d'utiliser la mémoire partagée. Protégez les données partagées des accès simultanés à l'aide de mutexes ou d'autres outils de synchronisation.

Les fonctions de synchronisation fournies par la bibliothèque d'unités d'exécution facilitent l'implémentation d'outils de synchronisation flexibles et puissants. Ces outils peuvent remplacer les fonctions de communication interprocessus traditionnelles, telles que les files d'attente de messages. Les canaux de communication peuvent être utilisés comme chemin de communication entre unités d'exécution.

Systèmes multiprocesseurs

Sur un système multiprocesseur, plusieurs unités d'exécution peuvent s'exécuter simultanément sur plusieurs unités centrales. Par conséquent, les programmes à unités d'exécution multiples peuvent s'exécuter beaucoup plus rapidement que sur un système uniprocesseur. Ils peuvent également être plus rapides qu'un programme utilisant plusieurs processus, car les unités d'exécution nécessitent moins de ressources et génèrent moins de temps système. Par exemple, la commutation des unités d'exécution dans le même processus peut être plus rapide, en particulier dans le modèle de bibliothèque M: N où les changements de contexte peuvent souvent être évités. Enfin, un avantage majeur de l'utilisation d'unités d'exécution est qu'un seul programme à unités d'exécution multiples fonctionnera sur un système uniprocesseur, mais peut naturellement tirer parti d'un système multiprocesseur, sans recompilation.

Restrictions

La programmation à unités d'exécution multiples est utile pour implémenter des algorithmes parallélisés à l'aide de plusieurs entités indépendantes. Toutefois, dans certains cas, plusieurs processus doivent être utilisés à la place de plusieurs unités d'exécution.

De nombreux identificateurs de système d'exploitation, ressources, états ou limitations sont définis au niveau du processus et, par conséquent, sont partagés par toutes les unités d'exécution d'un processus. Par exemple, les ID utilisateur et de groupe et les droits associés sont gérés au niveau du processus. Les programmes qui doivent affecter des ID utilisateur différents à leurs entités de programmation doivent utiliser plusieurs processus au lieu d'un seul processus à unités d'exécution multiples. D'autres exemples incluent des attributs de système de fichiers, tels que le répertoire de travail en cours, ainsi que l'état et le nombre maximal de fichiers ouverts. Les programmes à unités d'exécution multiples peuvent ne pas être appropriés si ces attributs sont mieux gérés indépendamment. Par exemple, un programme multitraitement peut permettre à chaque processus d'ouvrir un grand nombre de fichiers sans interférence d'autres processus.