1. 编写epoll服务器
epoll底层实现需要3个接口
在调用epoll_create时操作系统会创建一颗红黑树存放socket和一个队列存放就绪事件。
epoll_ctl函数用于控制某个文件描述符上的事件,可以注册事件,修改事件,删除事件。
参数:
epfd:由epoll_create生成的epoll专用的文件描述符
op:要进行的操作,可能的取值
EPOLL_CTL_ADD 注册
EPOLL_CTL_MOD 修改
EPOLL_CTL_DEL 删除
fd:关联的文件描述符
event:指向epoll_event的指针
调用epoll_wait时查看就绪队列
参数:
epoll_event:用于回传待处理事件的数组
maxevent;每次能处理的事件的最大数目
timeout:等待I/O事件发生的超时值
在浏览器验证的结果如图所示
2. 总结epoll优缺点
(1)epoll服务器规避了多路转接的所有问题;
(3)epoll服务器的IO效率不随文件描述符数目的增加而线性下降;
(2)epoll服务器支持一个进程打开大数目的文件描述符;
(4)内核采用红黑树机制通知上层哪些事件就绪
(5)底层采用内存映射技术,减少了内存拷贝的开销。