Archive for the ‘个人开源项目’ Category

实现了一个协程库

C\C++实现的协程库已经不少了,最近自己也实现了一个.

与大多数协程库不同的是,这个协程库实现的思路是”非侵入式”的,简而言之,使用者不用include相应的头文件,只需要在编译链接的时候链接这个库就好了.

这个协程库中hook了几个网络编程中常用的可能会阻塞I/O操作的API:read,send,accept,在这几个API调用时,进入库本身hook的调用,在它们里面将所要操作的socket加入epoll中,然后让出协程的执行权,在主协程中通过epoll调用之后知道是哪个socket可用了然后再唤醒相应的协程继续操作.同时还hook了pthread_create函数,在创建线程的时候实际上也是创建出一个协程来操作.

库里面做这些,无非是为了对使用者透明:实际上用的是协程,但是使用起来没什么感觉.

代码放在这里:

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

十字链表的AOI算法

看了云风写的

向eventrpc 客户端加入异步/同步操作

之前的实现中,使用一个单独的Dispatcher类,用于分发网络事件,但是这个类也是在主线程中的,这样带来的问题,诚如上一篇文章说的那样, 不能支持异步事件的通知.对客户端而言,当发出一个请求时,必须阻塞等待回复的返回.

于是,今天抽出时间,将Dispatcher类实现为与线程绑定,它运行在副线程中.

使用google protobuf RPC实现echo service

这篇文章将讲述如何使用google的protobuf库实现一个RPC service,就实现一个最简单的service吧:echo.
文章对应的代码都可以在eventrpc中找到,写下这篇文章时的svn revision是138.

1) 定义协议
首先需要为这个service定义proto文件, 如下:

package echo;

message EchoRequest
{
  required string message = 1;
};

message EchoResponse
{
  required string response = 1;
};

service EchoService
{
  rpc Echo(EchoRequest)

mktags相关文章收集

1) mktags–根据指定的文件路径以及文件类型生成ctags以及cscope索引文件的工具

2) mktags0.2版本发布

3) mktags0.3版本发布–支持指定某个目录的搜索深度

4) mktags0.4版本发布–支持添加删除搜索目录

eventrpc相关文章收集

1) 集成libevent,google protobuf的RPC框架

Pages: 1 2 Next