Gibt es einen Unterschied zwischen Fasern, Koroutinen und grünen Fäden und wenn ja, um welche handelt es sich?

57

Ich habe heute mehrere Artikel im Internet über Fasern, Koroutinen und grüne Fäden gelesen, und es scheint, dass diese Konzepte sehr viel gemeinsam haben, aber es gibt leichte Unterschiede, insbesondere, wenn wir über Fasern und Koroutinen sprechen.

Gibt es eine präzise und korrekte Zusammenfassung dessen, was sie voneinander unterscheidet?

Update: Ich finde das Dokument Distinguishing Coroutines and Fibers (N4024 C ++ Draft) besonders gut für die Unterscheidung von Fasern und Coroutinen.

DejanLekic
quelle

Antworten:

106

Eine Faser ist ein leichtgewichtiger Thread, der kooperatives Multitasking anstelle von präventivem Multitasking verwendet. Eine ausgeführte Glasfaser muss explizit "nachgeben", damit eine andere Glasfaser ausgeführt werden kann. Dies erleichtert die Implementierung erheblich als Kernel- oder Benutzerthreads.

Eine Coroutine ist eine Komponente, die eine Unterroutine so verallgemeinert, dass mehrere Einstiegspunkte zum Unterbrechen und Fortsetzen der Ausführung an bestimmten Stellen möglich sind. Im Gegensatz zu Unterprogrammen können Koroutinen durch Aufrufen anderer Koroutinen beendet werden, die später zu dem Punkt zurückkehren, an dem sie in der ursprünglichen Koroutine aufgerufen wurden.

Ein grüner Thread ist ein Thread, der von einer virtuellen Maschine (VM) anstelle von nativ vom zugrunde liegenden Betriebssystem geplant wird. Grüne Threads emulieren Multithread-Umgebungen, ohne auf systemeigene Betriebssystemfunktionen angewiesen zu sein. Sie werden im Benutzerbereich statt im Kernelbereich verwaltet, sodass sie in Umgebungen ohne systemeigene Thread-Unterstützung arbeiten können.

Robert Harvey
quelle
13
Ich kann nur für mich selbst sagen - diese Antwort ist für mich sehr wertvoll. Ich teile mit Robert die Meinung dazu.
DejanLekic
"Zusammenfassungen breiter Themen sind eine Spezialität von Wikipedia, die darauf ausgerichtet und optimiert ist, diese Inhalte bereitzustellen und eine darauf ausgerichtete Kultur zu fördern. Diejenigen, die bereit, in der Lage und erfahren sind, solche Zusammenfassungen bereitzustellen, gehen zu Wikipedia und nicht zu Stack Exchange ... Personen, die in Suchmaschinen nach solchen Inhalten suchen, werden in der Regel zwei direkt miteinander konkurrierende Inhaltsbeispiele präsentiert, eines im SE-Netzwerk und eines in der Wikipedia. Aus den oben genannten Gründen ist es am wahrscheinlichsten, dass der SE-Inhalt im Vergleich schlechter aussieht. "
gnat
Man beachte, dass Coroutinen und Fasern ziemlich eng miteinander verwandt sein können - möglicherweise sogar dasselbe. Wenn man Coroutinen haben möchte, kann man diese mit geringem Aufwand über Fasern realisieren und umgekehrt.
CHAO
9
Erklärt nicht, wie sie sich unterscheiden. Alle diese Definitionen scheinen ziemlich gleichwertig zu sein.
Hasen
1
@gstackoverflow: Java-Threads sind Betriebssystem-Threads. Die JVM plant sie über das Betriebssystem.
Robert Harvey