epoll的边缘触发(ET)和水平触发(LT)

本文介绍了epoll的边缘触发(ET)和水平触发(LT)两种模式的区别。边缘触发仅在状态变化时触发事件,而水平触发在满足条件时持续触发。文章通过酱油购买的例子和代码示例解释了两者的工作原理,并讨论了在边缘触发模式下如何避免阻塞以提高效率。同时强调,设置边缘触发时,文件描述符应设为非阻塞并进行循环读取以保持高效。
摘要由CSDN通过智能技术生成

epoll的边缘触发和水平触发:


epoll的默认模式是水平触发。
先大概了解一下这两种触发模式有什么不同:
水平触发(Level Trigger,也称条件触发)只要满足条件,就触发一个事件(只要有数据还未读完,就会一直触发)
边缘触发(Edge Trigger)每当状态发生变化时就触发一个事件。

可能概念不容易理解,这里举一个例子大概就能明白两者的区别了:比如某个人让你去买几袋酱油,你只买了一袋回去,水平触发的做法就是他让你继续去把剩下的几袋酱油买回来,如果没有完成任务,就一直通知你;边缘触发的做法就是不管完没完成任务,反正他让你买了,买没买完就是你自己的事了,下次买酱油这件事他就不管了,会让你去做其它的事。


通过上面的例子,我们对边缘触发和水平触发有了一个大概的了解,下面通过代码来深入了解:

#include <stdio.h>
#include <stdlib.h>
#include <sys/epoll.h>
#include <unistd.h>
#include <string.h>

#define MAXLINE 10

int main()
{
    pid_t pid;
    int fd[2];
    int i;
    char str[MAXLINE], ch = 'a';
    bzero(str, sizeof(str));
    //使用管道,fd[0]默认是读端,fd[1]默认是写端
    pipe(fd);
    pid = fork();
    if(pid == 0)    //child 负责写端
    {
        close(fd[0]);
        wh
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值