13、Linux文件I/O高级操作:边缘触发与内存映射

Linux文件I/O高级操作:边缘触发与内存映射

1. 边缘触发与水平触发事件

1.1 触发模式定义

在事件通知机制中,有边缘触发(Edge-Triggered)和水平触发(Level-Triggered)两种模式。当传递给 epoll_ctl() 的事件参数的 events 字段中设置了 EPOLLET 值时,对文件描述符 fd 的监视就是边缘触发的,反之则是水平触发。

1.2 生产者 - 消费者示例

考虑一个生产者和消费者通过Unix管道进行通信的场景:
1. 生产者向管道写入1 KB的数据。
2. 消费者对管道执行 epoll_wait() ,等待管道中有数据可读。

在水平触发模式下,步骤2中的 epoll_wait() 调用会立即返回,表明管道已准备好读取。而在边缘触发模式下,该调用直到步骤1发生后才会返回。也就是说,即使在调用 epoll_wait() 时管道是可读的,调用也不会返回,直到有新数据写入管道。

1.3 两种模式对比

水平触发是默认行为,与 poll() select() 的行为相同,也是大多数开发者所期望的。边缘触发行为需要不同的编程方法,通常会使用非阻塞I/O,并仔细检查 EAGAIN 错误。

<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值