水平触发和边缘触发的区别
2014-11-07 00:06
204 查看
水平触发(level-triggered,也被称为条件触发)LT: 只要满足条件,就触发一个事件(只要有数据没有被获取,内核就不断通知你)
边缘触发(edge-triggered)ET: 每当状态变化时,触发一个事件
“举个读socket的例子,假定经过长时间的沉默后,现在来了100个字节,这时无论边缘触发和条件触发都会产生一个read ready notification通知应用程序可读。应用程序读了50个字节,然后重新调用api等待io事件。这时条件触发的api会因为还有50个字节可读从 而立即返回用户一个read
ready notification。而边缘触发的api会因为可读这个状态没有发生变化而陷入长期等待。 因此在使用边缘触发的api时,要注意每次都要读到socket返回EWOULDBLOCK为止,否则这个socket就算废了。而使用条件触发的api 时,如果应用程序不需要写就不要关注socket可写的事件,否则就会无限次的立即返回一个write ready notification。大家常用的select就是属于条件触发这一类,长期关注socket写事件会出现CPU 100%的毛病。
边缘触发(edge-triggered)ET: 每当状态变化时,触发一个事件
“举个读socket的例子,假定经过长时间的沉默后,现在来了100个字节,这时无论边缘触发和条件触发都会产生一个read ready notification通知应用程序可读。应用程序读了50个字节,然后重新调用api等待io事件。这时条件触发的api会因为还有50个字节可读从 而立即返回用户一个read
ready notification。而边缘触发的api会因为可读这个状态没有发生变化而陷入长期等待。 因此在使用边缘触发的api时,要注意每次都要读到socket返回EWOULDBLOCK为止,否则这个socket就算废了。而使用条件触发的api 时,如果应用程序不需要写就不要关注socket可写的事件,否则就会无限次的立即返回一个write ready notification。大家常用的select就是属于条件触发这一类,长期关注socket写事件会出现CPU 100%的毛病。
相关文章推荐
- 水平触发和边缘触发的区别
- EPOLLLT——水平触发 EPOLLET——边缘触发区别
- NIO 水平触发,边缘触发的区别
- Linux IO的水平触发和边缘触发的区别
- ET(边缘触发)LT(水平触发)区别
- 水平触发和边缘触发的区别
- 水平触发和边缘触发的区别
- Epoll水平触发(Level Triggered)工作模式和边缘触发(Edge Triggered)工作模式区别
- 水平触发和边缘触发的区别
- EPOLL边缘触发和水平触发的区别
- epoll 水平触发和边缘触发的区别
- epoll 水平触发和边缘触发的区别
- epoll 水平触发和边缘触发的区别
- 水平触发和边缘触发的区别
- java学习-【转】NIO 水平触发,边缘触发的区别
- 实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO
- 实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO
- epoll的水平触发和边缘触发
- 水平触发与边缘触发i
- 水平触发,边缘触发