文档章节

lua 热更新设想~协程

I
 IvwsIgeMq
发布于 2016/02/14 11:04
字数 490
阅读 367
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

LSM-Tree 大数据索引技术

一、LSM-Tree概述 核心思想就是放弃部分读能力,换取写入能力的最大化。LSM-Tree ,这个概念就是结构化合并树(Log-Structured Merge Tree)的意思,它的核心思路其实非常简单,就是假定内存...

PeakFang-BOK
12分钟前
0
0
vue.js响应式原理解析与实现

从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染。之后,再接触了vue.js,当时也一度很好奇vue.js是如何监测数据更新并且重新...

peakedness丶
18分钟前
0
0
Weblogic补丁升级操作步骤

linux平台: weblogic1036 1:停止weblogic服务 2:打FMJJ补丁 a:获取weblogic_home目录并执行命令:export weblogic_home="/weblogic/wls1036_x64",(此目录一般为目录“user_projects”上...

fang_faye
31分钟前
0
0
04-《Apache Tomcat 9 User Guide》之部署项目

1.Introduction Deployment is the term used for the process of installing a web application (either a 3rd party WAR or your own custom web application) into the Tomcat server. 部......

飞鱼说编程
31分钟前
0
0
一位十年的老码农他眼中的区块链

大家可能已经听说过比特币、莱特币、以太币等等,以及它们作为一种新货币在市场上的潜力。 有趣的是,很多投资比特币的人也提到了区块链之类的东西。 显然,这项技术是比特币等其他东西的"基...

小刀爱编程
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部