Fibre (informatique) - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

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 utilisent impérativement un multitâche coopératif là où les threads utilisent en général un multitâche préemptif. Les threads dépendent souvent du scheduler du noyau (en anglais kernel) pour préempter un thread occupé et reprendre l'exécution d'un autre thread. Les fibres doivent manuellement rendre l'exécution afin de permettre à une autre fibre de continuer sa propre exécution.

Fibres et coroutines

Les fibres décrivent essentiellement le même concept que les coroutines. La distinction, s'il y en a une, est que les coroutines sont un concept même du langage, là où les fibres sont plus du domaine du système d'exploitation, vues comme des threads qui se trouvent ne pas s'exécuter en concurrence. La dépendance d'un concept envers l'autre n'est pas claire : Les fibres peuvent être vues comme une implémentation de coroutines, ou une fonctionnalité sur laquelle est implémentée les coroutines.

Support des fibres selon les systèmes d'exploitation

Les fibres nécessitent moins de support de la part du système d'exploitation que les threads. Elles peuvent être implémentées sur les systèmes modernes Unix en utilisant des fonctions comme getcontext, setcontext et swapcontext définies dans l'entête ucontext.h de la librairie GNU Portable Threads.

Sur Microsoft Windows, les fibres sont créées via les appels à ConvertThreadToFiber et CreateFiber; une fibre suspendue pouvant voir son exécution reprendre dans n'importe quelle thread. Le Fiber local storage, analogue au Thread Local Storage, peut être utilisé pour créer des copies de variables uniques pour la fibre.

Symbian OS utilise un concept similaire aux fibres dans son Active Scheduler. Un Active object (Symbian OS) contient une fibre qui sera exécutée par l'Active Scheduler lorsque l'une des tâches asynchrones s'achève. De multiples Active objects peuvent être en attente d'exécution (selon leur priorité), et chacun doit restreindre son propre temps d'exécution.

Avantages et désavantages

Puisque les fibres fonctionnent dans un mode multitâche coopératif, la synchronisation n'est plus le problème majeur comme avec les threads fonctionnant en multitâche préemptifs. Les concepts usuels de synchronisation comme les sémaphores, les mutex et l'atomicité des opérations sont inutiles lorsque l'on écrit le code destiné à une fibre, puisque la synchronisation est implicite. Toutefois, certaines librairies utilisant des fibres pour certaines opérations (comme les entrées/sorties non-bloquantes), il est recommandé de parcourir les documentations avant d'utiliser des fibres.

Le désavantage des fibres est que les fibres ne bénéficient pas automatiquement d'une architecture multiprocesseurs sans passer par l'usage de threads préemptifs. Toutefois, un modèle de thread de type N:M avec pas plus de threads que de cœurs/processeurs peut être plus efficace qu'un modèle simple basé uniquement sur des threads, ou un modèle simple basé uniquement sur des fibres.

Page générée en 0.081 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise