Lua   发布时间:2022-04-12  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了lua – 放弃协同程序大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在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,协程可能永远不会被恢复,因此可能永远不会正确地“结束”.

我可以这样做几十个协同程序而不必担心吗?将协同程序置于此状态是否安全?这个很贵吗?

解决方法

垃圾收集器可以很容易地确定协程无法访问并收集它.我不知道是否有任何文件表明会发生这种情况,但我尝试了“经验方法”:
while true do
  local cor = coroutIne.wrap(function() coroutIne.yield(false) end)
  cor()
end

内存使用率并未随着时间的推移而增

编辑:谷歌说:

There is no explicit operation for deleting a Lua coroutine; like any other value in Lua,coroutines are discarded by garbage collection.(PDF中的第4页)

大佬总结

以上是大佬教程为你收集整理的lua – 放弃协同程序全部内容,希望文章能够帮你解决lua – 放弃协同程序所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。