文档章节

lua 热更新设想~协程

I
 IvwsIgeMq
发布于 2016/02/14 11:04
字数 490
阅读 355
收藏 2


    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 )






© 著作权归作者所有

共有 人打赏支持
I
粉丝 2
博文 6
码字总数 2715
作品 0
厦门
高级程序员
ngx_lua_API 指令详解(五)coroutine.create,coroutine.resume,coroutine.yield 等集合指令介绍

ngx_lua 模块(原理实现) 1、每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM; 2、将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问; 3、每个外部请求都由一个Lua...

tinywan1227
2017/07/19
0
0
用 Lua 的协程 coroutine 控制 Codea 屏幕刷新速度

用 Lua 的协程 coroutine 控制 Codea 屏幕刷新速度 概述 在 中, 函数 缺省每秒执行 次, 我们希望能修改一下它的刷新速度, 于是想到了 的一个特性:, 希望试着用它来控制程序执行的节奏, 不过目...

FreeBlues
2016/06/14
23
0
fakescript 1.0 发布,比Lua更轻量的嵌入式脚本语言

fakescript 1.0 发布,fakescript 是一款轻量级的嵌入式脚本语言 与Lua相比,它的运行速度更快,更容易使用,同时源代码可读性更强 脚本特性: @.代码风格类似lua @.全部为函数 @.支持array...

shitfuck
2014/11/23
3.5K
32
xLua 2.1.6 发布,腾讯开源的手游热更新解决方案

xLua 是腾讯开源的手游热更新解决方案,有以下特性: Unity 下 Lua 编程支持 xLua 为 Unity 增加 Lua 脚本编程的能力,进而提供代码逻辑增量更新的可能。当然不仅仅如此,在 coco2dx 上的实践...

王练
2017/03/03
1K
1
ngx_lua_API 指令详解(六)ngx.thread.spawn、ngx.thread.wait、ngx.thread.kill介绍

摘要:通过lua-nginx-module中的ngx.thread同时执行多个任务。 ngx_lua中访问多个第三方服务 ngxlua中提供了ngx.socket API,可以方便的访问第三方网络服务。如下面的代码,通过getresponse函...

tinywan1227
2017/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【七】组合Action

本章描述了常用定义Action的方法。 自定义action builders 我们在action一章已经看过如何声明一个action——有request parameter、无request parameter、有body parser等等。你可以在 asynch...

Landas
37分钟前
0
0
Spring Boot实战之基础回顾

本文作者: 吴伟祥 本文链接: https://wuweixiang.cn/2018/08/21/Spring-Boot实战之基础回顾/ 版权声明: 本博客所有文章除特别声明外均为原创,采用CC BY-NC-SA 4.0 许可协议。转载请在文章开...

吴伟祥
38分钟前
0
0
OAuth认证开发

提示: 以下测试是基于项目安装成功,初始化数据库(initial_db.ddl, oauth.ddl, initial_data.ddl)后的测试, 也可在页面上点击"client_details"菜单里进行测试 方式1:基于浏览器 (grant_type=...

舒文joven
46分钟前
1
0
第二章-对象及变量的并发访问-第二篇

锁对象的改变 请阅读如下代码 public class MainClass { private String lock = "123"; public void printStringB() { try { synchronized (lock) { ......

简心
50分钟前
0
0
日志中记录代理IP以及真实客户端、apache只记录指定URI的日志

apache 日志中记录代理IP以及真实客户端 默认情况下log日志格式为: LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined 其中%h 是记录访问者的IP,如果在web的前...

李超小牛子
59分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部