现在的位置: 首页 > 综合 > 正文

epoll lt 和 et

2013年05月26日 ⁄ 综合 ⁄ 共 555字 ⁄ 字号 评论关闭

LT模式:epoll就是一个快速版poll,可读可写就绪条件和传统poll一致

ET模式:为了避免Starvation,建议 

            1)文件描述符设置为非阻塞 

            2)只在read或write返回EAGAIN后,才能调用下一次epoll_wait 

            3)应用层维护一个就绪链表,进行轮询,可以防止大量IO时在一个描述符上长期read或write(因为只有等到read 

                 或 write返回EAGAIN后才表示该描述符处理完毕)而令其它描述符starve

 

         理解ET的含义后,上面那些操作其实都是显然的。以wirte为例说明,LT时只要有一定范围的空闲写缓存区,每次epoll_wait都是可写条件就绪,但是ET时从第一次可写就绪后,epoll_wait不再得到该描述符可写就绪通知直到程序使描述符变为非可写就绪(比如write收到EAGAIN)后,epoll_wait才可能继续收到可写就绪通知(比如有空闲可写缓存)

         其实ET相对于LT来说,把文件描述符状态跟踪的部分责任由内核空间推到用户空间,内核只关心状态切换即从未就绪到就绪切换时才通知用户,至于保持就绪状态的,内核不再通知用户,这样在实现非阻塞模型时更方便,不需要每次操作都先查看文件描述符状态

抱歉!评论已关闭.