有多种基于事件机制的系统调用。
epoll
select
kqueue
libevent可以处理三种事件:计时器,信号和IO事件。
计时器的实现采用的是RBTree,可以实现对计时器高效的查询,排序和删除。 到1.4版本,实现的数据结构已经改为Heap,可以提高效率。(具体的测试统计数据呢?)
epoll的操作只涉及4个函数:epoll_create, epoll_ctl, close和epoll_wait。
是Linux设备:/dev/epoll
可以去了解下游戏服务器的性能权衡使用select或poll,当在线人数上升时,性能会以2-3次方的指数下降?因此每台服务器都有一个明显的上限? // 这些数据可以收集一些的。
网络模型, Socket连接
epoll有两种工作模式:分别是LT(Level Triggeredd)和ET(Edge Triggered)。 LT模式下同时支持 阻塞和非阻塞 Socket,ET为高速模式,只支持非阻塞 Socket。
采用select模型,一个进程最多可打开的Socket数目是1024,当然可以通过修改内核代码加以扩大,但这样做麻烦,而且不具有可行性。
epoll是变相的 nio实现,
采用了回调机制,只处理激活状态的Socket,因为只有激活的Socket才可以通过fd调用操作。
select,处理Socket连接时,则需要遍历整个Socket列表(不管是以数组的形式存放,还是以链表的形式存放)。 但是在LAN内,
当几乎所有连接都处于激活状态的情绪下,select的性能甚至比epoll还要好。但是在WAN中,即只有少数 Socket连接处于激活状态的情绪下, epoll具有明显优势。
memcached使用了libevent库,但是使用的是里面的哪种 事件处理机制呢?
posted on 2009-07-28 23:57
thinke365 阅读(337)
评论(0) 编辑 收藏 引用