select&poll&epoll的优势和缺陷总结
select和poll的缺点
epoll的原理及优势
epoll_create在内核上创建的eventpoll结构:
struct eventpoll{
...
/*红黑树的根节点,这棵树中存储着所有添加到epoll中的需要监控的事件*/
struct rb_root rbr;
/*双链表中则存放着将要通过epoll_wait返回给用户的满足条件的事件*/
struct list_head rdlist;
...
};
LT模式
内核数据没有读完,就会一直上报数据。
ET模式
内核数据只上报一次。
(ET模式和LT模式没有绝对的好坏,不同场景下会使用到不同的模式,libevent(ET模式))
moduo采用的是LT模式
- 不会丢失数据或消息
- 应用没有读取完数据,内核是会不断上报的
- 低延迟处理
- 每次读取数据只需要一次系统调用;照顾了多个连接的公平性,不会因为某个连接上的数据量过大而影响其他连接处理消息
- 跨平台处理
- 像select一样可以跨平台使用