在Lua 5.1中,从未让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 ,协程可能永远不会被恢复,因此可能永远无法正常“结束”。
我可以这样做几十个协同程序而不必担心吗?将协同程序置于此状态是否安全?这个很贵吗?
答案 0 :(得分:17)
垃圾收集器可以轻松确定协程无法访问并收集它。我不知道是否有任何文件说这会发生,但我尝试了“经验方法”:
while true do local cor = coroutine.wrap(function() coroutine.yield(false) end) cor() end
内存使用率并未随着时间的推移而增长。
编辑: Google说: