web-dev-qa-db-fra.com

Y a-t-il une différence entre les fibres, les coroutines et les fils verts et si c'est le cas, qu'est-ce que c'est?

Aujourd'hui, je lisais plusieurs articles sur Internet sur les fibres, les coroutines et les fils verts, et il semble que ces concepts aient beaucoup en commun, mais il y a de légères différences, surtout quand on parle de fibres et de coroutines.

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

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

60
DejanLekic

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

A Coroutine est un composant qui généralise un sous-programme pour autoriser plusieurs points d'entrée pour suspendre et reprendre l'exécution à certains emplacements. Contrairement aux sous-programmes, les coroutines peuvent quitter en appelant d'autres coroutines, qui peuvent revenir ultérieurement au point où elles ont été invoquées dans la coroutine d'origine.

Un Green Thread est un thread qui est planifié par une machine virtuelle (VM) au lieu d'être natif par le système d'exploitation sous-jacent. Les threads verts émulent des environnements multithreads sans compter sur des capacités de système d'exploitation natif, et ils sont gérés dans l'espace utilisateur au lieu de l'espace du noyau, ce qui leur permet de travailler dans des environnements qui ne prennent pas en charge les threads natifs.

110
Robert Harvey