Czy istnieje różnica między włóknami, rogówkami a zielonymi nićmi, a jeśli tak, to na czym to polega?

57

Dzisiaj czytałem w Internecie kilka artykułów o włóknach, koronach i zielonych niciach i wydaje się, że te koncepcje mają ze sobą wiele wspólnego, ale istnieją niewielkie różnice, szczególnie gdy mówimy o włóknach i koronach.

Czy istnieje zwięzłe, prawidłowe podsumowanie tego, co je różni?

Aktualizacja: Uważam, że dokument Wyróżniające się coroutines i fibres (projekt N4024 C ++) jest szczególnie dobry w rozróżnianiu włókien i coroutines.

DejanLekic
źródło

Odpowiedzi:

106

Fiber to lekki wątek, który wykorzystuje wielozadaniowości zamiast poboru wielozadaniowej. Działające włókno musi jawnie „ustąpić”, aby umożliwić działanie innego włókna, co znacznie ułatwia ich implementację niż jądro lub wątki użytkownika.

Współprogram jest komponentem, który jest uogólnieniem podprogram w celu umożliwienia wejścia do wielu punktów zawieszenia i wznowienia wykonywania w niektórych miejscach. W przeciwieństwie do podprogramów, coroutines mogą wyjść, wywołując inne coroutine, które później mogą powrócić do punktu, w którym zostały wywołane w oryginalnej coroutine.

Zielony wątek jest wątek, który jest zaplanowany przez maszynę wirtualną (VM) zamiast natywnie przez bazowego systemu operacyjnego. Zielone wątki emulują środowiska wielowątkowe bez polegania na natywnych możliwościach systemu operacyjnego i są zarządzane w przestrzeni użytkownika zamiast w przestrzeni jądra, umożliwiając im pracę w środowiskach, które nie obsługują wątków natywnych.

Robert Harvey
źródło
13
Mogę tylko powiedzieć dla siebie - ta odpowiedź jest dla mnie bardzo cenna. Podzielam opinię na ten temat z Robertem.
DejanLekic
„Streszczenia szerokich tematów są specjalnością Wikipedii, która koncentruje się i optymalizuje pod kątem dostarczania tych treści i wspierania kultury zorientowanej na nie. Ludzie chętni, najlepiej przygotowani i doświadczeni w dostarczaniu takich streszczeń idą do Wikipedii, a nie do Stack Exchange ... Osobom szukającym tego w wyszukiwarce zwykle prezentowane byłyby dwa bezpośrednio konkurujące przykłady treści, jeden w sieci SE, drugi w Wikipedii ... Z powodów wymienionych powyżej najprawdopodobniej zawartość SE wyglądałaby gorzej w porównaniu ... „
komar
Zauważ, że coroutine i błonnik można uznać za dość blisko spokrewnione - być może nawet to samo. Jeśli ktoś chciałby kortyny, można je wdrożyć za pomocą włókien przy bardzo niewielkim wysiłku i odwrotnie.
cHao
9
Nie wyjaśnia, czym się różnią. Wszystkie te definicje wydają się raczej równoważne.
hasen
1
@gstackoverflow: Wątki Java są wątkami systemu operacyjnego. JVM planuje je za pośrednictwem systemu operacyjnego.
Robert Harvey