Различие между “сопрограммой” и “потоком”?

Каковы различия между "сопрограммой" и "потоком"?

139
задан jldupont 20 December 2009 в 03:05
поделиться

3 ответа

Сопрограммы - это форма последовательной обработки: в любой момент времени выполняется только одна (точно так же, как подпрограммы AKA, процедуры AKA - они просто передают эстафету друг другу более плавно).

Потоки являются (по крайней мере, концептуально) формой параллельной обработки: несколько потоков могут выполняться в любой момент времени. (Традиционно на однопроцессорных одноядерных машинах этот параллелизм моделировался с некоторой помощью ОС - в настоящее время, поскольку так много машин являются многопроцессорными и / или многоядерными, потоки будут де-факто выполняются одновременно, а не только «концептуально»).

102
ответ дан 23 November 2019 в 23:18
поделиться

Одним словом: упреждение. Сопрограммы действуют как жонглеры, которые постоянно передают друг другу хорошо отрепетированные пункты. Потоки (настоящие потоки) могут быть прерваны практически в любой момент, а затем возобновлены позже. Конечно, это влечет за собой всевозможные проблемы с конфликтами ресурсов, отсюда и печально известный Python GIL - Global Interpreter Lock.

Многие реализации потоков на самом деле больше похожи на сопрограммы.

18
ответ дан 23 November 2019 в 23:18
поделиться

Это зависит от используемого вами языка. Например, в Lua это одно и то же (переменный тип сопрограммы называется поток ).

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

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

9
ответ дан 23 November 2019 в 23:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: