Должен ли lua_resume всегда иметь балансирующее lua_yield?

#lua #coroutine

#lua #сопрограмма

Вопрос:

У меня есть API на основе C, доступный для lua, который планирует сопрограммы lua на основе триггеров в игровом движке.

Я использовал многозадачный lua в моем игровом цикле, используя синхронные потоки (fibers) для поддержания пула объектов lua_Thread, для которых я вызываю только lua_resume.

Перечитывание документации lua_resume / lua_yield подразумевает, что я должен иметь дело с большой утечкой памяти, поскольку каждый вызов lua_yield должен иметь возможность извлекать информацию о состоянии из какого-либо стека?

Ответ №1:

Сопрограммы должным образом собираются GC. (если на него нет ссылок — оно будет собрано. Таким образом, нет шансов на утечку памяти.) Вам не обязательно yield() , вы можете разрешить сопрограмме завершиться, или return из нее — вы не сможете возобновить завершенную сопрограмму.