Насколько плохо это в Lua 5.1, чтобы никогда не позволить coroutine правильно закончить? Другими словами, если coroutine дает, но я никогда не возобновляю его, оставит ли он много состояний, лежащих до завершения программы?Заброшенные сопрограммы
cor=coroutine.wrap(somefunc)
while true do
done=cor()
if done then -- coroutine exited with "return true"
break
else -- coroutine yielded with "coroutine.yield(false)"
if some_condition then break end
end
end
function somefunc()
-- do something
coroutine.yield(false)
-- do some more
return true
end
В зависимости от some_condition в вышеприведенном псевдокоде, то сопрограммная никогда не может быть возобновлена, и, таким образом, возможно, никогда не правильно «конец».
Могу ли я сделать это с десятками сопрограмм, не беспокоясь? Можно ли оставить сопрограммы в этом состоянии? Это дорого?
Я не знаю, Lua на всех, но если бы я был на вашем месте, я бы хотел знать больше вопрос: как вы можете определить, не утечка памяти (или что вам интересно, когда вы говорите «дорогой»)? Если есть инструмент, например, тогда вы можете ответить на вопрос эмпирически сами. –
Это будет работать для оценки элемента потребления памяти, но мне также интересно, безопасно ли оно. То есть создадут ли это непредвиденные проблемы? – proFromDover