Y a-t-il une différence entre les fibres, les coroutines et les fils verts et si tel est le cas?

57

Aujourd'hui, je lisais plusieurs articles sur Internet sur les fibres, les coroutines et les fils verts. Il semble que ces concepts aient beaucoup en commun, mais il existe de légères différences, en particulier lorsque nous parlons de fibres et de coroutines.

Existe-t-il un résumé concis et correct de ce qui les différencie les uns des autres?

Mise à jour: je trouve le document intitulé Distinguer les coroutines et les fibres (ébauche N4024 C ++) particulièrement efficace pour différencier les fibres des coroutines.

DejanLekic
la source

Réponses:

106

Une fibre est un fil léger qui utilise le multitâche coopératif au lieu du multitâche préemptif. Une fibre en fonctionnement doit explicitement "céder" pour permettre à une autre fibre de s'exécuter, ce qui rend leur mise en oeuvre beaucoup plus facile que les threads du noyau ou de l'utilisateur.

Une coroutine est un composant qui généralise un sous-programme pour permettre à plusieurs points d'entrée de suspendre et de reprendre l'exécution à certains endroits. Contrairement aux sous-routines, les coroutines peuvent être fermées en appelant d'autres coroutines, qui peuvent ensuite revenir au point où elles ont été invoquées dans la coroutine d'origine.

Un thread vert est un thread planifié par une machine virtuelle (VM) plutôt que nativement par le système d'exploitation sous-jacent. Les threads verts émulent des environnements multithreads sans s'appuyer sur aucune fonctionnalité native du système d'exploitation. Ils sont gérés dans l'espace utilisateur au lieu de l'espace du noyau, ce qui leur permet de fonctionner dans des environnements ne prenant pas en charge les threads natifs.

Robert Harvey
la source
13
Je peux seulement dire pour moi-même - cette réponse est très utile pour moi. Je partage l'opinion avec Robert à ce sujet.
DejanLekic
"Les résumés de sujets généraux sont la spécialité de Wikipédia, qui vise à fournir ce contenu et à promouvoir une culture axée sur celui-ci. Les personnes désireuses, capables et expérimentées dans la fourniture de tels résumés se rendent sur Wikipedia, pas sur Stack Exchange ... Les personnes à la recherche de ce moteur de recherche se verront généralement présenter deux exemples de contenu directement en concurrence, l'un sur le réseau SE, l'autre sur Wikipedia ... Pour les raisons susmentionnées, il est fort probable que le contenu SE semble inférieur en comparaison ... "
Gnat
Remarque, les coroutines et les fibres peuvent être considérées comme très proches, voire la même chose. Si on voulait des coroutines, elles peuvent être mises en œuvre via des fibres avec très peu d'effort, et inversement.
cHao
9
N'explique pas en quoi ils sont différents. Toutes ces définitions semblent plutôt équivalentes.
hasen
1
@gstackoverflow: les threads Java sont des threads de système d'exploitation. La JVM les planifie via le système d'exploitation.
Robert Harvey