Есть ли разница между волокнами, сопрограммами и зелеными нитями, и если это так, что это?

57

Сегодня я читал в Интернете несколько статей о волокнах, сопрограммах и зеленых нитях, и кажется, что эти понятия имеют много общего, но есть небольшие различия, особенно когда мы говорим о волокнах и сопрограммах.

Есть ли краткое, правильное резюме того, что отличает их друг от друга?

Обновление: документ « Отличительные сопрограммы и волокна» (черновик N4024 C ++) особенно хорош при различении волокон и сопрограмм.

DejanLekic
источник

Ответы:

106

Волокно представляет собой легкий поток , который использует кооперативную многозадачность вместо вытесняющей многозадачности. Работающее волокно должно явно «уступать», чтобы позволить другому волокну работать, что делает их реализацию намного проще, чем потоки ядра или пользователя.

Сопрограммный является компонентом , который обобщает подпрограмму , чтобы несколько точек входа для приостановки и возобновления выполнения в определенных местах. В отличие от подпрограмм, сопрограммы могут выйти, вызвав другие сопрограммы, которые могут позже вернуться к точке, в которой они были вызваны в исходной сопрограмме.

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

Роберт Харви
источник
13
Я могу сказать только за себя - этот ответ очень ценен для меня. Я разделяю мнение с Робертом по этому вопросу.
DejanLekic
«Краткое изложение широких тем - это специальность Википедии, которая сфокусирована и оптимизирована для предоставления этого контента и формирования культуры, ориентированной на него. Люди, которые хотят, лучше всего способны и имеют опыт в предоставлении таких резюме, отправляются в Википедию, а не в Stack Exchange ... Людям, которые ищут это в поисковой системе, обычно предоставляют два непосредственно конкурирующих примера контента, один в сети SE, другой в Википедии ... По причинам, упомянутым выше, наиболее вероятно, что контент SE будет выглядеть хуже по сравнению ... "
комнат
Обратите внимание, что сопрограммы и волокна можно считать довольно тесно связанными - возможно, даже одно и то же. Если вы хотите сопрограммы, они могут быть реализованы через волокна без особых усилий, и наоборот.
Чао
9
Не объясняет, чем они отличаются. Все эти определения кажутся довольно эквивалентными.
hasen
1
@gstackoverflow: потоки Java являются потоками ОС. JVM планирует их через ОС.
Роберт Харви