信号驱动IO异步IO的对比理解刨析, epoll地ET,LT

本文详细探讨了信号驱动IO与异步IO的工作原理,通过生活实例解读select/poll/poll的工作模式,并重点讲解了epoll的边缘触发(Et)和水平触发(Lt)机制。通过实例展示了ET在处理小块数据的优势。最后总结了IO多路复用在高并发服务器中的应用和epoll在技术选型中的重要性。

目录

前言.

一. 谈信号驱动IO  (对比异步IO来看)

信号驱动IO 对比 异步 IO进行理解

UDP  +  SIGIO信号注册模拟实现一下信号驱动IO

二. 生活的角度理解select poll epoll三种IO多路复用技术的工作模式.

生活实例理解select  和 poll 工作原理

生活理解epoll工作原理

三. 细谈一下epoll的ET和LT

四. 总结本文


前言.

  • 小杰之前分析过的几种常见IO模型,以及给出了小杰对于IO多路复用技术的浅显理解.  (上篇撸了很多代码,有着select poll epoll分别的服务端代码实现,感兴趣的可以阅读哈)

网络编程实战之高级篇, 彻底解决面试C10k问题, 高并发服务器, IO多路复用, 同时监视多个IO事件_小杰312的博客-优快云博客网络编程实战之高级篇, 彻底解决面试C10k问题, 高并发服务器, IO多路复用, IO监视https://blog.youkuaiyun.com/weixin_53695360/article/details/123311049?spm=1001.2014.3001.5501

一. 谈信号驱动IO  (对比异步IO来看)

  • 信号驱动IO 对比 异步 IO进行理解

  •  信号驱动IO: 内核将数据准备好的时候, 使用SIGIO信号通知应用程序进行IO操作
  • 通知应用程序处理IO, 是开始处理IO,          这个时候还是存在阻塞的,将数据从内核态拷贝进入到用户态的过程至少是阻塞住的         (应用程序将数据从内核态拷贝到用户态的过程是阻塞等待的, 和异步IO的区别)     (此处是区分信号驱动IO和异步IO的关键所在)
  • 信号驱动IO, 我们提前在信号集合中设置好IO信号等待, 注册好对应的IO处理函数  handler,IO数据准备就绪后,会递交SIGIO信号,通知应用程序中断然后开始进行对应的IO处理逻辑. 但是通知处理IO的时候存在将数据从  内核空间拷贝到用户空间的过程,(而异步IO是数据拷贝完成之后内核再通知应用程序直接开始处理, 应用程序直接处理,不需要拷贝数据阻塞等待)

  •  异步IO: 由内核在数据拷贝完成时, 通知应用程序(而信号驱动是告诉应用程序何时可以开始拷贝数据)
  • 真正的做到了完完全全的非阻塞,发起aio_read之后应用程序立即可以去做其他的事情了.   调用了aio_read之后会立即进行返回继续向下执行应用程序,由kernel内核进行等待数据准备,只有当数据准备好了且拷贝到来用户空间,一切完成后,kernel给应用程序发送一个signal,告知它read完成了, 没有任何的阻塞,你直接处理就是
  • 异步IO由于它不会对用户进程,应用程序产生任何的阻塞,所以他对于高并发网络服务器的实现至关紧要.

小结:  

  •  任何IO操作都是存在  等待数据准备完成 和  将 数据从内核态拷贝到用户态两个过程的
  • 两个过程中等待数据消耗的时间一般远超于拷贝数据所花费的时间,所以一般我们进行IO的优化,都是想办法尽量降低等待时间
  • 所以信号驱动IO 因为是通知开始处理数据,应用程序需要将数据从内核拷贝进入到用户态 (数据拷贝阻塞等待)     和异步IO的区别
  • 异步IO   是完全不存在应用程序的阻塞等待,平时应用程序干自己的事情,当数据完全准备好了  (数据  完成了拷贝 ),直接通知应用程序回调处理数据
  • 所以我们之前介绍的  blocking io   non-blocking io    io multiplexing  (IO多路复用)  本质上都是属于   synchronous   IO  (同步IO) 都是存在有阻塞的,有人说不对吧:  哪 non-blocking  IO 呢?     非阻塞IO仅仅只是在数据准备阶段上来说是非阻塞的,数据没准备好立马返回,可是数据拷贝阶段还是阻塞住的,所以本质还是同步IO.   (大大的狡猾,忘记了阻塞除了准备数据的时候存在,拷贝数据也是阻塞住的)
  • 只有异步IO   asynchronous 是完全做到了整个过程非阻塞的 ,  当进程发起IO操作之后,就直接返回再也不必理睬,直kernel 发送一个信号,告诉进程说IO完成(涵盖数据拷贝完成),  在这个过程中,是完全避免了阻塞进程了的
评论 92
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杰312

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值