Archive for 二月 2013

Lua5.1.4代码分析(十八)-pcall的实现

Lua支持两种形式的函数调用,一种对调用过程的堆栈进行保护,即使中间过程出错,也不至于让进程退出,也就是pcall,一般在使用C调用Lua写的脚本函数时,都采用pcall方式。

对比起一般的函数调用方式,pcall多做了这些事情:对函数调用前的Lua堆栈进行保护在调用完毕之后恢复,支持传入出错时的函数在调用出错时调用。

来依次看这个过程。

首先看入口函数lua_pcall:

LUA_API int lua_pcall (lua_State *L, int nargs, int

类Erlang项目qnode

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

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