EMZETT.
Увійти

Корутини

Коротко: Корутини — функції, які можна призупинити посередині та пізніше продовжити з того самого місця.

Докладніше: На відміну від потоків, перемикає не операційна система, а сам код добровільно віддає керування (кооперативна багатозадачність). Тому вони дуже легковагі: десятки тисяч працюють в одному потоці.

Подробиці

  • Ключові слова: yield (генератори Python), await (async/await), suspend (Kotlin), горутини (Go, плануються середовищем виконання).
  • Сила: Багато очікування мережі чи бази даних без накопичення бездіяльних потоків.
  • Слабкість: Корутина, що обчислює замість очікування, блокує всі інші в тому ж потоці. Навантаження на CPU належить процесам чи потокам.
  • Перебіг: Цикл подій (event loop) запускає корутини, запам’ятовує їхній стан і відновлює, коли результат готовий.
  • Під капотом: Компілятор зазвичай перетворює їх на скінченний автомат.

Див. також: async/await