I/O多路转接之epoll

来源:互联网 发布:yum安装本地rpm包命令 编辑:程序博客网 时间:2024/06/05 19:38

epoll的工作原理:

epoll把用户关心的文件描述符上的事件放在内核的一张事件表里,所以不用像select那样,每次都要重复传入文件描述符。但epoll需要一个文件描述符来唯一标识内核中的这个事件表。这个文件描述符用函数epoll_create()来创建。

epoll_wait()函数在一段时间内等待文件描述符中的事件,成功返回就绪事件的个数,失败返回-1。

epoll_ctl()函数用于事件注册,注册要监听的事件类型。

代码:




epoll有两种工作模式:

LT:epoll的缺省工作方式,如果内核告诉你一个文件描述符就绪了,但是你不做任何操作,内核还是会继续通知你的。所以,这种模式编程出错误可能性要小一点。

ET:高速的工作方式,当一个文件描述符就绪了,内核只会通知一次,当事件就绪后,如果这次没有把这个事件对应的套接字缓冲区处理完,在这个套接字中新的事件再次到来时,在ET模式下无法再次从epoll_wait调用中获取这个事件。而LT模式正好相反,只要一个事件对应的套接字缓冲区还有数据,就总能从epoll_wait中获取这个事件。

------------------------------------------------------------------------------------------------------

select ,poll,epoll 之间的比较:


参考《Linux高性能服务器编程》


0 0
原创粉丝点击