Jak źle w Lua 5.1 nie pozwala się kończyć prawidłowo? Innymi słowy, jeśli coroutine ustąpi, ale nigdy go nie wznowię, czy pozostawia wiele stanów w pobliżu aż do zakończenia programu?Porzucanie coroutines
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
zależności some_condition w Pseudokod powyżej, współprogram może nigdy zostać wznowione, a więc nigdy nie może prawidłowo „koniec”.
Czy mogę to zrobić dla kilkudziesięciu partnerów bez obaw? Czy bezpiecznie jest opuszczać coroutines w tym stanie? Czy jest drogie?
nie wiem Lua w ogóle, ale gdybym był na twoim miejscu, chciałbym wiedzieć, tym większy pytanie: w jaki sposób możesz określić, czy masz przeciekać pamięć (lub cokolwiek, co cię interesuje, kiedy mówisz "drogie")? Jeśli istnieje narzędzie, na przykład, możesz samodzielnie odpowiedzieć na pytanie empirycznie. –
Byłoby to pomocne w ocenie elementu zużycia pamięci, ale zastanawiałem się również, czy jest bezpieczny. To znaczy. czy stworzy później nieprzewidziane problemy? – proFromDover