Отказ от сопрограмм

Насколько плохо в Lua 5.1 никогда не допускать правильного завершения сопрограммы? Другими словами, если сопрограмма дает, но я никогда не возобновляю ее, оставляет ли она много состояний, оставшихся до завершения программы?

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 в псевдокоде выше, сопрограмма может никогда не возобновиться и, таким образом, никогда не может должным образом "конец".

Могу ли я сделать это с десятками сопрограмм, не беспокоясь? Безопасно ли оставлять сопрограммы в этом состоянии? Это дорого?

8
задан proFromDover 4 September 2010 в 15:12
поделиться