水平触发和边沿触发

epoll是一个高效的I/O事件通知机制,支持水平触发和边缘触发两种模式。水平触发通知会在文件描述符可读写时通知,而边缘触发则只在有新I/O活动时通知,常与非阻塞I/O配合使用。在边缘触发中,为避免数据丢失,需要在接收到通知后尽可能执行I/O操作,且通常文件描述符应设置为非阻塞模式。

默认情况下epol1提供的是水平触发通知。这表示epol1 会告诉我们何时能在文件描述符上以非阻塞的方式执行I/O 操作。这同po11()和select ()所提供的通知类型相同。

epoll API还能以边缘触发方式进行通知---也就是说, 会告诉我们自从上一次调用epo11_ wait ()以来文件描述符上是否已经有I/0 活动了(或者由于描述符被打开.了,如果之前没有调用的话)。使用epo11的边缘触发通知在语义上类似于信号驱动I/O,只是如果有多个I/0事件发生的话,epoll 会将它们合并成一-次单独的通知,通过epo11_ wait()返回,而在信号驱动I/0中则可能会产生多个信号。要使用边缘触发通知,我们在调用epo11_ ct1()时在ev. events字段中指定EPOLLET标志。

 

我们通过一个例子来说明epoll 的水平触发和边缘触发通知之间的区别。假设我们使用epoll 来监视一个套接字上的输入(EPOLLIN) ,接下来会发生如下的事件。

1.套接字上有输入到来。

2.我们调用一-次epoll wait()。无论我们采用的是水平触发还是边缘触发通知,该调用都会告诉我们套接字已经处于就绪态了。

3.再次调用epo11_ wait()。

如果我们采用的是水平触发通知,那么第二个epoll_ wait (调用将告诉我们套接字处于就绪态。而如果我们采用边缘触发通知,那么第二个epoll wait()调用将阻

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值