【发布时间】:2026-01-02 04:50:01
【问题描述】:
在 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,协程可能永远不会恢复,因此可能永远不会正确“结束”。
我可以对数十个协程执行此操作而不必担心吗?让协程处于这种状态是否安全?这个很贵吗?
【问题讨论】:
-
我根本不了解 Lua,但如果我站在你的立场上,我想知道一个更大的问题:你如何确定你是否在泄漏内存(或任何你感兴趣的东西当您说“昂贵”时)?例如,如果有工具,那么您可以自己凭经验回答问题。
-
这可以用于评估内存消耗元素,但我也想知道它是否安全。 IE。会不会造成以后无法预料的问题?