文档章节

lua 热更新设想~协程

I
 IvwsIgeMq
发布于 2016/02/14 11:04
字数 490
阅读 474
收藏 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
厦门
高级程序员
私信 提问
加载中

评论(0)

Unity XLua 官方案例学习

Helloworld 1 using UnityEngine; 2 using XLua; 3 4 public class Helloworld : MonoBehaviour { 5 // Use this for initialization 6 void Start () { 7 LuaEnv luaenv = new LuaEnv(); 8 ......

osc_039ggp1i
2018/04/23
0
0
用 Lua 的协程 coroutine 控制 Codea 屏幕刷新速度

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

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

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

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

新增特性 1、xlua.private_accessible 支持私有内嵌类型 2、添加 xlua.release ,用于主动解除 lua 对 c# 某对象的引用 3、支持内嵌委托的显示构造 4、需要传 class 的地方(比如 xlua.priva...

王练
2018/03/21
2.7K
2
用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- CustomYieldInstruction 自定义中断指令

ActionScript3脚本引擎为了方便热更新逻辑开发,提供的从脚本继承Unity类库功能在一些情况下可以提供开发的便利。 这次来建立一个示例,演示一下如何在脚本中自定义协程中断指令 Unity中的协...

osc_392it4em
2018/04/28
1
0

没有更多内容

加载失败,请刷新页面

加载更多

zookeeper实现分布式锁总结,看这一篇足矣(设计模式应用实战)

zk实现分布式锁纵观网络各种各样的帖子层出不穷,笔者查阅很多资料发现一个问题,有些文章只写原理并没有具体实现,有些文章虽然写了实现但是并不全面 借这个周末给大家做一个总结,代码拿来...

osc_75pcgicm
27分钟前
17
0
163邮箱配置imap和smtp,隐藏的设置

http://config.mail.163.com/settings/imap/index.jsp?uid=XXXXX@163.com,这是一个隐藏的设置,要到这里配置才能用163的imap或者pop...

bengozhong
28分钟前
22
0
Python可变对象和不可变对象

Python中一切皆对象,每个对象都有其唯一的id,对应的类型和值,其中id指的是对象在内存中的位置。根据对象的值是否可修改分为可变对象和不可变对象。其中, 不可对象包括:数字,字符串,t...

osc_pnyuctmm
29分钟前
12
0
数据库垂直拆分 水平拆分

1 数据库拆分 当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了。 数据库拆分简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数...

努力的学渣
30分钟前
22
0
微信小程序连接低功率蓝牙控制单片机上硬件设备

1.软件部分介绍   微信小程序是一种新的应用,用户不需要下载应用只用通过扫二维码或者打开链接就能使用,使用完后不需要卸载,直接关闭就行了。微信在2017年初推出微信小程序开发环境。任...

osc_uxgfefy0
31分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部