码迷,mamicode.com
首页 > 其他好文 > 详细

epoll的水平触发和边缘触发

时间:2019-12-17 20:03:17      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:发送   如何   sign   需求   驱动   进程   trigger   情况下   请求   

水平触发(Level Triggered): 当满足条件时, 触发.  (select和poll采用该方式)
边缘触发(Edge Triggered): 当状态变化时,触发.  (信号驱动[Signal-Driven I/O]采用该方式)

 

过程:

当数据到来的时候, 触发器满足条件,发送通知, 进程接收到通知后,请求内核读取数据.

 

水平触发,是因为数据就绪,可IO,满足条件,则发送通知.

边缘触发,是因为状态发生了变化, 则发送通知.

 

理想情况下, 两种触发方式都能满足需求.

 

但是当内核在读取数据的过程无法一次读完, 就会产生问题.

水平触发: 这里依旧有数据在, 发送通知!

边缘触发: 没有状态变化, 不发送...

于是, 边缘触发情况下,未读数据就再无法被读到.

 

相较而言 边缘触发的实际使用效率并没有大幅度提高, 而且还需要解决数据.

在epoll中, LT(Level Triggered)模式为缺省默认.

如果需要选择使用ET(Edge Triggered)模式, 则需要考虑, 如何解决数据读取问题.

epoll的水平触发和边缘触发

标签:发送   如何   sign   需求   驱动   进程   trigger   情况下   请求   

原文地址:https://www.cnblogs.com/jrri/p/12056326.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!