Что такое корутина?
Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 48 из 54.
Представьте, что вы играете в видеоигру. Вы можете приостановить её в любой момент, заняться чем-то другим, а затем вернуться и продолжить именно с того места, где остановились. Корутины в Lua работают похожим образом.
Корутина — это как специальная функция, которая может приостанавливать свое выполнение на середине и затем продолжать работу с того же самого места. В отличие от обычных функций, которые выполняются от начала до конца без остановок, корутины дают вам контроль над тем, когда они приостанавливаются и возобновляются.
Эта возможность позволяет реализовать то, что называется кооперативной многозадачностью. Вместо того чтобы выполнять несколько задач одновременно, корутины позволяют добровольно переключаться между различными задачами.
Одна корутина выполняется некоторое время, приостанавливается, другая берет управление на себя и так далее. Каждая корутина взаимодействует, самостоятельно решая, когда вернуть управление.
Сопрограммы полезны, когда вам нужно разбить длительные операции, управлять пошаговыми системами или создавать последовательности, которым необходимо запоминать свое состояние между вызовами. В следующих уроках вы узнаете, как создавать, приостанавливать и возобновлять работу сопрограмм в Lua.
Шпаргалка
Корутина (сопрограмма) — это специальная функция, которая может приостанавливать свое выполнение и возобновлять его позже с того же самого места, в отличие от обычных функций, которые выполняются от начала до конца без остановок.
Корутины обеспечивают кооперативную многозадачность, при которой задачи добровольно передают управление друг другу, а не выполняются одновременно. Одна корутина запускается, приостанавливается, управление берет на себя другая, и цикл продолжается.
Корутины полезны для разделения длительных операций, управления пошаговыми системами или создания последовательностей, которым необходимо сохранять свое состояние между вызовами.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутая итерация таблиц
Итерация с помощью pairs()Итерация с помощью ipairs()pairs() против ipairs()Повторение — Лист персонажа2Дополнительные функции библиотеки table
table.concat()Создание таблиц и unpack()table.sort()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордов3Продвинутые концепции функций
Возврат нескольких значенийВариативные функции (...)Функции как объекты первого классаАнонимные функцииЧто такое замыкание?Итоги — простой обработчик событий9Корутины для начинающих
Что такое корутина?coroutine create и resumeПауза с помощью coroutine.yield()resume и yieldПроверка статуса корутиныИтоги — Генератор чиселИтоги — Векторная математика