Epoll服务器

来源:互联网 发布:got it get it gotcha 编辑:程序博客网 时间:2024/05/17 23:40

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)底层采用内存映射技术,减少了内存拷贝的开销。