文档章节

lua 热更新设想~协程

I
 IvwsIgeMq
发布于 2016/02/14 11:04
字数 490
阅读 351
收藏 2
点赞 1
评论 0


    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

用 Lua 的协程 coroutine 控制 Codea 屏幕刷新速度

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

FreeBlues ⋅ 2016/06/14 ⋅ 0

fakescript 1.0 发布,比Lua更轻量的嵌入式脚本语言

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

shitfuck ⋅ 2014/11/23 ⋅ 32

nginx和lua的协程

1、缘起 我最早接触协程时,对这东西很费解,甚至我看了lua的协程源码实现后,这个疑虑还是没有消除。直到有次在需要用异步编程时,对协程的理解一下子明白了。所以希望用从异步的角度解释协...

那一剑的风情 ⋅ 2015/06/09 ⋅ 5

xLua 2.1.6 发布,腾讯开源的手游热更新解决方案

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

王练 ⋅ 2017/03/03 ⋅ 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

skynet 阅读笔记

https://github.com/cloudwu/skynet skynet 整体代码分为3个部分: skynet 实现是一套Actor模式的网络架构,Actor 中核心的概念包括: 在skynet的核心网络层中,主要包含: module加载采用d...

李勇2 ⋅ 2015/08/20 ⋅ 0

利用Lua协程实现Future模式

Future模式: 参见http://www.cnblogs.com/zhiranok/archive/2011/03/26/FuturePattern.html 使用future的好处是即利用了异步的并行能力,又保证主逻辑串行执行,保持简单。 2. Lua 协程 si...

follitude ⋅ 2016/09/17 ⋅ 0

lua程序设计之协同程序

本文的内容主要来自于《lua程序设计》一书,部分内容来自网络 一个具有多个协同程序的程序在任意时刻只能运行一个协同程序,并且正在运行的协同程序只会在其显式地要求挂起时,它的执行才会暂...

firekido ⋅ 2017/06/22 ⋅ 0

【深入Lua】理解Lua中最强大的特性-coroutine(协程)

---------- 点击进入我的新博客 coroutine基础 Lua所支持的协程全称被称作协同式多线程(collaborative multithreading)。Lua为每个coroutine提供一个独立的运行线路。然而和多线程不同的地...

王选易 ⋅ 2013/12/21 ⋅ 15

没有更多内容

加载失败,请刷新页面

加载更多

下一页

6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具

压缩打包介绍 使用压缩工具的好处: 使用压缩文件,不仅可以节省磁盘空间,而且在传输时还能节省网络宽带。 我们通常讲的家用宽带和机房宽带100M是有区别的: 机房宽带的上行和下行都是100M,...

Linux_老吴 ⋅ 25分钟前 ⋅ 0

SpringBoot热部署加持

概述 进行SpringBoot的Web开发过程中,我们很多时候经常需要重启Web服务器才能保证修改的 源代码文件、或者一些诸如xml的配置文件、以及一些静态文件生效,这样耗时又低效。所谓的热部署指的...

CodeSheep ⋅ 31分钟前 ⋅ 0

OSChina 周六乱弹 —— 假如你被熊困到树上

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》 《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》- 谢...

小小编辑 ⋅ 今天 ⋅ 5

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 今天 ⋅ 1

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部