中铁建设集团网站,北京市网站设计,免费企业网站建立,正规网站备案代理目录 1.epoll的LT和ET模式介绍
2.epoll的ET模式如何处理
2.1 epoll的ET模式编程读取数据的处理方式
2.2 将描述符设置为非阻塞模式的方法
3.ET模式的总结
4.epoll的LT模式和ET模式总结
5.IO复用总结 1.epoll的LT和ET模式介绍
epoll对文件描述符有两种操作模式:
LT(Leve…目录 1.epoll的LT和ET模式介绍
2.epoll的ET模式如何处理
2.1 epoll的ET模式编程读取数据的处理方式
2.2 将描述符设置为非阻塞模式的方法
3.ET模式的总结
4.epoll的LT模式和ET模式总结
5.IO复用总结 1.epoll的LT和ET模式介绍
epoll对文件描述符有两种操作模式:
LT(Level Trigger电平触发)模式
ET(Edge Trigger边沿触发)模式。
LT 模式是默认的工作模式。当往 epoll 内核事件表中注册一个文件描述符上的 EPOLLET 事件时epoll 将以高效的 ET 模式来操作该文件描述符。 2.epoll的ET模式如何处理
2.1 epoll的ET模式编程读取数据的处理方式
将描述符设置为 非阻塞模式 循环读取数据
也就是ET模式下的描述符必须是非阻塞的
2.2 将描述符设置为非阻塞模式的方法
//ser_epoll_ET.c
#include fcntl.hvoid setnonblock(int fd)
{int oldflfcntl(fd,F_GETFL);int newfloldfl|O_NONBLOCK;if(fcntl(fd,F_SETFL,newfl)-1){perror(fcntl error\n);}
} 3.ET模式的总结
ET模式下我们都需要做哪些事情?一共三点:
(1)添加事件类型的时候一定要添加上EPOLLET,这叫开启ET模式;;
(2)描述符要设置成非阻塞模式
(3)在IO函数返回以后,就是epoll_wait返回以后,它提醒我们描述符上有读事件产生了,我们要循环去处理;直到把这个描述符上的数据去处理完;然后再去处理下一个描述符;
所以就是说ET模式下的编程就要求我们的描述符必须是非阻塞模式 面试题:ET模式和LT模式编程有什么区别?
除了以上三点(1)(2)(3),还有一个最重要的区别:ET模式下的编程就要求我们的描述符必须是非阻塞模式
而LT模式阻塞或者非阻塞都可以,都不影响; 4.epoll的LT模式和ET模式总结
对于 LT 模式操作的文件描述符当 epoll_wait 检测到其上有事件发生并将此事件通知应用程序后应用程序可以不立即处理该事件。这样当应用程序下一次调用 epoll_wait 时还会再次向应用程序通告此事件直到该事件被处理。
对于 ET 模式操作的文件描述符当 epoll_wait 检测到其上有事件发生并将此事件通知应用程序后应用程序必须立即处理该事件因为后续的 epoll_wait 调用将不再向应用程序通知这一事件。所以 ET 模式在很大程度上降低了同一个 epoll 事件被重复触发的次数因此效率比 LT 模式高。
5.IO复用总结