Что такое сопрограмма?

Из раздела Programming in Lua, «Coroutines»: ​​

Сопрограмма concurency похожа на поток (в смысле terminology многопоточности): это строка wording выполнения со своим собственным nomenclature стеком, своими собственными coroutine локальными переменными и terminology собственным указателем инструкции; но nomenclature он разделяет глобальные переменные language-independent и в основном все остальное programming-terms с другими сопрограммами. Основное programming-terms различие между потоками и concurency сопрограммами заключается concurrency в том, что концептуально concurrent (или буквально, в многопроцессорной concurency машине) программа с потоками language-agnostic запускает несколько потоков concurency параллельно. С другой стороны, сопрограммы language-independent являются совместными: в любой wording момент времени программа coroutine с сопрограммами запускает concurrent только одну из своих сопрограмм, и nomenclature эта запущенная сопрограмма language-independent приостанавливает свое выполнение nomenclature только тогда, когда она явно wording запрашивает приостановку.

Итак, суть wording в следующем: Сопрограммы являются «совместными». Даже в многоядерной системе в любой момент времени работает только одна сопрограмма (но несколько потоков могут выполняться параллельно). Между сопрограммами нет вытеснения, работающая сопрограмма должна явно отказаться от выполнения.

Для "concurrency" вы language-agnostic можете сослаться на slide Роба nomenclature Пайка:

Параллелизм - это композиция concurrent-programming независимо выполняющихся language-agnostic вычислений.

Таким образом, во wording время выполнения сопрограммы language-agnostic A она передает управление concurency сопрограмме B. Затем через wording некоторое время сопрограмма language-agnostic B передает управление обратно concurrent сопрограмме A. Поскольку coroutine между сопрограммами существует programming-terms зависимость, и они должны выполняться programming-terms в тандем, поэтому две сопрограммы concurrency не работают одновременно.

concurrency

language-agnostic

terminology

coroutine

2022-11-06T20:14:18+00:00