Archive for the ‘qnode’ Category

Lua的一个问题

最近对qnode进行压力测试,结果很不理想.前期只顾着赶功能,没有进行单元测试,只是简单的进行一些测试,所以现在打算回过头来对一些基础模块写测试用例.

这是本篇的题外话了,在压力测试qnode的时候,由于qnode是使用的actor模型,每个actor会有一个lua协程,但是在做压测的时候,会创建出很多actor这样就出了问题,来看看lua_newthread这个用来创建协程的函数:

LUA_API lua_State *lua_newthread (lua_State *L)

Lua5.1.4代码分析(二十三)-如何实现Lua代码的热更新

能很好的支持代码热更新机制,是大部分选择要嵌入脚本语言的原因之一。好处很简单,脚本代码可以热更新的话,调试和线上解决问题都可以不用重启程序了,对开发效率有很大的帮助。

今天就来谈谈Lua代码如何实现热更新。

先简单回顾之前提过的模块和require机制。Lua内部提供了一个require函数,来实现模块的加载,它做的事情主要是以下几个:
1)

qnode 0.1发布

大概半年前提到的qnode项目,实际上我在这半年里一直不停的ci代码。不过最近改变思路,决定时不时发布一个小版本,包含几个新的特性,有点类似互联网产品中的快速发布敏捷迭代。这样的好处是,其他人能看到这个项目的进度,我也有一个比较明确的短期目标去开发。

0.1版本主要做的是这几件事情:

类Erlang项目qnode

我在2010年开始接触Erlang,后来2011年开始抄Erlang实现的Riak项目来学习Erlang使用。在这之前,我基本上都在使用C++来编写服务器代码,大部分的C系服务器中,不管是reactor还是proactor模型,在处理非阻塞I/O问题时,都会采用注册回调函数的方式来处理异步I/O,本质上回调函数就是个函数指针,但是经常要带上一些参数的话,复杂一点的可能就会采用C++模板。当逻辑复杂起来时,这样写出来的代码是很难看的,对阅读者而言难,在调试问题时对调试者而言也是个问题。

Erlang采用了另一种方式解决这样的问题。在Erlang中可以创建所谓的“微进程”,当由于I/O等原因可能造成阻塞时,Erlang