Чи є різниця між волокнами, корутини та зеленими нитками, і якщо це так, що це?


57

Сьогодні я читав в Інтернеті кілька статей про волокна, супроводи та зелені нитки, і, схоже, ці поняття мають дуже багато спільного, але є невеликі відмінності, особливо коли ми говоримо про волокна та супроти.

Чи є стислий, правильний підсумок того, що їх відрізняє один від одного?

Оновлення: Я вважаю, що документ, що відрізняє корутини та волокна (проект N4024 C ++), особливо хороший для розмежування між волокнами та корутинами.

Відповіді:


106

Волокно являє собою легкий потік , який використовує кооперативну багатозадачність замість витісняє багатозадачності. Запущене волокно повинне явно "поступатись", щоб дозволити запускати інше волокно, що робить їх реалізацію набагато простішою, ніж ядра або потоки користувачів.

Сопрограммний є компонентом , який узагальнює підпрограму , щоб кілька точок входу Зупиняє й продовжує виконання в певних місцях. На відміну від підпрограм, корутини можуть вийти, зателефонувавши до інших процедур, які згодом можуть повернутися до того пункту, коли вони були викликані в початковій програмі.

Зелений різьблення є потоком , який запланований віртуальною машиною (VM) замість спочатку базової операційної системи. Зелені нитки емулюють багатопотокові середовища, не покладаючись на будь-які нативні можливості ОС, і ними керують у просторі користувача, а не в просторі ядра, що дозволяє їм працювати в середовищах, які не мають підтримки рідних потоків.


13
Я можу сказати лише для себе - ця відповідь для мене дуже цінна. Я поділяю думку з Робертом з цього приводу.
DejanLekic

"Резюме широкої тематики - це спеціальність Вікіпедії, яка орієнтована та оптимізована на наданні цього контенту та вихованні культури, орієнтованої на нього. Люди, які бажають, найкращі та досвідчені в наданні таких резюме, переходять у Вікіпедію, а не на обмін стеками ... Люди, які шукають це в пошуковій системі, як правило, представляють два безпосередньо конкуруючі приклади контенту, один у мережі SE, інший у Вікіпедії ... Через причини, згадані вище, швидше за все, вміст SE виглядатиме неповноцінним порівняно ... "
гнат

Зауважте, що супроводи та волокна можна вважати досить тісно пов'язаними - можливо, навіть одне і те ж. Якщо потрібні супроти, їх можна реалізувати за допомогою волокон з дуже невеликим зусиллям, і навпаки.
cHao

9
Не пояснює, чим вони відрізняються. Усі ці визначення виглядають досить рівнозначно.
hasen

1
@gstackoverflow: потоки Java - це потоки ОС. JVM планує їх через ОС.
Роберт Харві
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.