Thread (informatique)

Thread (informatique)
Page d'aide sur l'homonymie Pour les articles homonymes, voir Thread et Fil.
Un processus avec deux threads.

Un thread ou fil (d'exécution) ou tâche (terme et définition normalisés par ISO/IEC 2382-7:2000 ; autres appellations connues : processus léger, unité de traitement, unité d'exécution, fil d'instruction, processus allégé, exétron[1]), est similaire à un processus car tous deux représentent l'exécution d'un ensemble d'instructions du langage machine d'un processeur. Du point de vue de l'utilisateur, ces exécutions semblent se dérouler en parallèle. Toutefois, là où chaque processus possède sa propre mémoire virtuelle, les threads d'un même processus se partagent sa mémoire virtuelle. Par contre, tous les threads possèdent leur propre pile d’appel.

Sommaire

Utilisation

Les threads ou tâches sont typiquement utilisés avec l'interface graphique ("GUI") d'un programme. En effet, les interactions de l'utilisateur avec le processus, par l'intermédiaire des périphériques d'entrée, sont gérées par un thread, tandis que les calculs lourds (en termes de temps de calcul) sont gérés par un ou plusieurs autres threads. Cette technique de conception de logiciel est avantageuse dans ce cas, car l'utilisateur peut continuer d'interagir avec le programme même lorsque celui-ci est en train d'exécuter une tâche. Une application pratique se retrouve dans les traitements de texte où la correction orthographique est exécutée tout en permettant à l'utilisateur de continuer à entrer son texte.

L'utilisation des threads permet donc de rendre l'utilisation d'une application plus fluide, car il n'y a plus de blocage durant les phases de traitements intenses.

Threads et multitâche

Les threads se distinguent du multi-processus plus classique par le fait que deux processus sont typiquement indépendants et peuvent interagir uniquement à travers une API fournie par le système telle que IPC. D'un autre côté les threads partagent une information sur l'état du processus, des zones de mémoires ainsi que d'autres ressources. Puisqu'il n'y a pas de changement de mémoire virtuelle, la commutation de contexte (context switch) entre deux threads est moins coûteuse que la commutation de contexte entre deux processus. On peut y voir un avantage de la programmation utilisant des threads multiples.

Avantages et inconvénients

Dans certains cas, les programmes utilisant des threads sont plus rapides que des programmes architecturés plus classiquement, en particulier sur les machines comportant plusieurs processeurs. Hormis le problème du coût de la commutation de contexte, le principal surcoût dû à l'utilisation de processus multiples provient de la communication entre processus séparés. En effet, le partage de certaines ressources entre threads permet une communication plus efficace entre les différents threads d'un processus. Là où deux processus séparés doivent utiliser un mécanisme fourni par le système pour communiquer, les threads partagent une partie de l'état du processus.

La programmation utilisant des threads est toutefois plus difficile, et l'accès à certaines ressources partagées doit être restreint par le programme lui-même, pour éviter que l'état d'un processus ne devienne temporairement incohérent, tandis qu'un autre thread va avoir besoin de consulter cette portion de l'état du processus. Il est donc obligatoire de mettre en place des mécanismes de synchronisation (à l'aide de sémaphores par exemple), tout en conservant à l'esprit que l'utilisation de la synchronisation peut aboutir à des situations d'interblocage. La complexité des programmes utilisant des threads est aussi nettement plus grande que celle des programmes déférant le travail à faire à plusieurs processus plus simples. Cette complexité accrue, lorsqu'elle est mal gérée lors de la phase de conception ou de mise en œuvre d'un programme, peut conduire à de multiples problèmes.

Support des threads

Les systèmes d'exploitation mettent en œuvre généralement les threads.

Certains langages de programmation, tels que Smalltalk et certaines implémentations de Java[2],[3],[4],[5], intégrent un support pour les threads implémentés dans l'espace utilisateur (green threads), indépendamment des capacités du système d'exploitation hôte. La plupart des langages (Java sur la plupart des systèmes d'exploitation, C# .NET, Ruby, ...) utilisent des extensions du langage ou des bibliothèques pour utiliser directement les services de multithreading du système d'exploitation, mais de façon portable (threads natifs). Enfin, des langages comme Haskell utilisent un système hybride à mi-chemin entre les deux approches. A noter que, pour des raisons de performances en fonction des besoins, la plupart des langages permettent d'utiliser au choix des threads natifs ou des green threads (notamment via l'utilisation de fibres).

En programmation orientée objet on parle de classe réentrante lorsque des instances distinctes d'une telle classe peuvent être utilisées par des threads sans créer de problèmes de concurrence. On parle de classe thread-safe lorsque plusieurs threads peuvent utiliser une même instance de cette classe sans en engendrer de problèmes de concurrence.

Confusion possible

Il ne faut pas confondre la technologie Hyperthreading incluse dans certains processeurs Intel avec les threads. Cette technologie permet en effet aussi bien l'exécution simultanée de processus distincts que de threads. Toute machine comportant des processeurs multiples (SMP) ou des processeurs intégrant l'HyperThreading permet l'exécution plus rapide de programmes utilisant des threads aussi bien que des processus multiples.

Voir aussi

Sur les autres projets Wikimedia :

Liens externes

Références

  1. Programmation Linux en pratique, Arnold Robbins, CampusPress Référence, ISBN : 2-7440-1979-8, p. 54
  2. Matching the Thread Models Éléments sur le support des threads sur le site officiel Sun. (en)
  3. Programming Java threads in the real world Guide d'utilisation des threads sous Java sur le site JavaWorld. (en)
  4. Java™ Technology on the Linux Platform Annonce sur le site officiel Sun d'abandon des green threads sur Linux. (en)
  5. Java and Solaris threading Documentation officielle Sun sur le modèle de threading sur Solaris (en)



Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Thread (informatique) de Wikipédia en français (auteurs)

Игры ⚽ Нужна курсовая?

Regardez d'autres dictionnaires:

  • Thread (homonymie) — Thread Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom …   Wikipédia en Français

  • thread — ● ►en VF /xpjtzkq/ n. m. ● 1. ►PROG Tâche Légère en français. processus léger, correspondant à l exécution d un petit programme, ou d une routine d un programme plus gros, indépendamment de celui ci (on parle alors de multithread). ● 2.… …   Dictionnaire d'informatique francophone

  • Thread Local Storage — Le Thread Local Storage (TLS), ou mémoire locale de thread, est un type de mémoire spécifique et locale à un thread. Ce mécanisme est parfois requis parce que tous les threads d un même processus partagent le même espace d adressage. Donc, les… …   Wikipédia en Français

  • Thread hijacking — Détournement d enfilade Le détournement d enfilade (thread hijacking en anglais) est l action d écrire un message qui ne respecte pas le sujet et l intention des autres messages dans lesquels il est inséré. Courrier électronique Le détournement d …   Wikipédia en Français

  • Thread — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Sur les autres projets Wikimedia : « Thread », sur le Wiktionnaire (dictionnaire universel) Thread (de l anglais qui désigne à l origine un …   Wikipédia en Français

  • Parallélisme (informatique) — Pour les articles homonymes, voir parallèle. Blue Gene L cabinet., un des ordinateurs massivement parallèle les plus rapides des années 2000 En informatiqu …   Wikipédia en Français

  • Fibre (informatique) — Pour les articles homonymes, voir Fibre (homonymie). En Informatique, une fibre (fiber en anglais) est un thread d exécution particulièrement léger. Comme les threads, les fibres partagent la même mémoire virtuelle. Toutefois, les fibres… …   Wikipédia en Français

  • Semaphore (informatique) — Sémaphore (informatique) Pour les articles homonymes, voir sémaphore. Un sémaphore est une variable protégée (ou un type de donnée abstrait) et constitue la méthode utilisée couramment pour restreindre l accès à des ressources partagées (par… …   Wikipédia en Français

  • Multi-thread — Processus léger Pour les articles homonymes, voir Processus, Léger, Thread et Fil. Un processus avec deux process …   Wikipédia en Français

  • Processus (informatique) — Traduction à relire Process states → Process …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”