lua 热更新设想~协程
lua 热更新设想~协程
IvwsIgeMq 发表于2年前
lua 热更新设想~协程
  • 发表于 2年前
  • 阅读 287
  • 收藏 2
  • 点赞 1
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: 感谢云风写下的有关lua和服务端经验博客 记录下我对lua热更新的一些思考 也做来工作记录来做用,欢迎来喷


    lua热更新的方式大多都以重新加载文件来更新代码,这方面在百度上可以找不到不少,无非是 _G 和package.loaded 的清理这部分就不在这里说了。

    当我们在使用lua做服务端的逻辑开发语言时时常会用到协程来处理并发和异步调用这程方式可以让代码更新易理解组织 

但是当我们在处理热理新问题时以上我们清理的_G和package.loaded 有被协程用到的表就不能完全的清理因来协程入口函数提默认会使用创建时的全局环境此时会增加一次引用 直到协程结束。


    当更新时有未结束的协程那这时这些协程不能得到更新,更新可能这些旧协程向下执时会加载到新的代码而产生混合的协程执行的结果未知。

   可先的方法就是等到没有旧协程时更新但是又不能及时更新。

    而我想及时更新,并确保更新的效果,而之所以不能在有旧协程时更新最不希望就是出现混合如果能够保证旧协程的执行逻辑,而新协程又能完全按更新的逻辑执行那么只能保存旧的环境与级有需要加载的所有模块,可以在加载模块时做处理保留模块引用,然后设置协程入口函数的环境( setfenv(func,tab) )固化协程执行环境。

    具休可以参见http://stackoverflow.com/questions/17563373/lua-setfenv-on-threads-doesnt-seem-to-work

    其中对协程对象设置环境我测试时没有起做用(luajit 2.0.3  osx )






共有 人打赏支持
粉丝 3
博文 6
码字总数 2715
×
IvwsIgeMq
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: