摘要: beanstalk中两种重要的数据结构就是集合和最小堆。 1. 集合 集合struct ms { size_t used, cap, last; void **items; ms_event_fn oninsert, onremove;};voidms_init(ms a, ms_event_fn oninsert, ms_event_fn onremove){ a->us... 阅读全文
posted @ 2013-08-24 15:55 blockcipher 阅读(332) 评论(0) 推荐(0)
摘要: 1. tube定义 在beanstalk中,tube只是一个消息队列的名字,本身只是作为job的容器,因此不具有复杂的操作。 由于job具有优先级,这里采用最小堆保存job job具有ready和delay两种状态,因此每个tube采用两个最小堆对job进行管理。 tube结构struct tube { uint refs; char name[MAX_TUBE_NAME_LEN]; ... 阅读全文
posted @ 2013-08-24 15:49 blockcipher 阅读(1062) 评论(0) 推荐(0)
摘要: 在beanstalk中,网络处理模块没有使用第三方库,而是作者自己实现的一个模块,总计代码不到100行。是epoll的使用典范。1. epoll_eventstruct epoll_event结构如下:struct epoll_event { __uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */};typedef union epoll_data { void ptr; int fd; __uint32_t u32; __uint64_t u64; }... 阅读全文
posted @ 2013-08-24 15:07 blockcipher 阅读(359) 评论(0) 推荐(0)
摘要: 1. 文件结构组织beanstalk的源码文件物理组织如下:makefile文件:Makefile 数据结构定义: dat.h 主程序: main.c Server实例: serv.c 协议处理: prot.c 连接管理: conn.c tube管理: tube.c job管理: job.c 集合管理: ms.c daemon监听端口: net.c epoll抽象: linux.c 堆操作: heap.c daemon框架: sd-daemon.h sd-daemon.c binlog处理: file.c walg.c 系统时间: tim... 阅读全文
posted @ 2013-08-24 12:32 blockcipher 阅读(546) 评论(0) 推荐(0)