epoll服务器
一、概述
- epoll是Linux下多路复用IO接口select/poll的增强版本
- epoll能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
- select使用轮询来处理,随着监听 fd 数目的增加而降低效率。而epoll只需要监听那些已经准备好的队列集合中的文件描述符,效率较高。
二、epoll API
头文件 #include <sys/epoll.h>
1.创建一个epoll句柄,参数size用来告诉内核监听的文件描述符个数,跟内存大小有关
int epoll_create(int size)
参数
- size 希望监听的文件描述符的个数(建议值),真实值跟内存相关
返回值 - 一个epoll句柄(返回一根结点,底层由红黑树构成)
2.控制某个epoll监控的文件描述符上的事件(注册、修改、删除)
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
参数
- epfd:为epoll_creat的句柄
- op:表示动作,用3个宏来表示:
EPOLL_CTL_ADD(注册新的fd到epfd),
EPOLL_CTL_MOD(修改已经注册的fd的监听事件),
EPOLL_CTL_DEL(从epfd删除一个fd); - fd:需要操作的文件描述符
- event:告诉内核需要监听的事