当前位置: 首页 > news >正文

【Linux】高级I/O

IO模型

  1. 阻塞性IO(循环等待事件发生)
  2. 非阻塞型IO(轮询检测)
  3. 信号驱动型IO(事件发生时会发送信号)
  4. 多路转接型IO(存在多条事件检测并拷贝)
  5. 异步IO

阻塞型IO

在这里插入图片描述

非阻塞型IO(轮询检测)

在这里插入图片描述
阻塞型IO与非阻塞型IO的唯一区别是在等待内核将数据准备完成的阶段,阻塞型IO会让recvfrom进程挂起,等待数据准备好的进程信号,非阻塞型IO会立即返回,然后被应用进程循环调用,但是轮询要频繁的访问内核中的文件描述符等资源,非常消耗cpu的资源,一般不这样做。

信号驱动型IO

应用进程在 “内核准备数据” 阶段不阻塞(可并行处理其他任务),仅当内核完成数据准备后,通过 “信号” 主动通知应用进程,再调用读/写程序,将数据从内核复制到用户空间。

  1. 通过SIGIO信号,注册一个函数,然后绑定文件描述符
  2. 当文件描述符中数据可以准备读写时(数据被存入了内核缓冲区),OS通过SIGIO信号调用注册的函数,然后执行read/write函数,将数据从内核中拷贝到用户空间。

信号驱动型IO,也是同步IO的一种,虽然在等待数据准备完成是异步的,但是将数据从内核拷贝到用户,还是应用进程在执行,并且需要等待数据拷贝完成才能执行后续逻辑
在这里插入图片描述

异步IO

在这里插入图片描述
AIO是内核提供的系统调用,不是一个内核进程,不占用 CPU 时间片,其请求处理逻辑(如调度 IO 设备、数据传输)是 “附着” 在 IO 设备驱动的中断上下文或内核工作队列(Work Queue)中执行的。AIO是只有被动触发才会调用,否则不会占用任何资源。

IO多路转接

整个IO流程分为两步数据等待+数据拷贝阻塞型IO、非阻塞型IO和信号驱动型IO,唯一的差别都是在数据等待阶段,但它们数据拷贝阶段都是进程执行,所以它们都是同步IO。
异步IO在这两个阶段都不是进程处理,都是内核完成的,所以其是异步。

IO多路转接,优化的是数据等待阶段,提前将多个文件描述符交给Select/Epoll,他们依次等待多个(将多个文件描述符对应的数据从设备拷贝到内核缓冲区),然后返回一个可读条件,然后交给用户进程进行读取(从内核换从去拷贝到用户缓冲区[指定地址]中)。

http://www.dtcms.com/a/418812.html

相关文章:

  • 开源的容器化平台:Docker高级应用与实战案例
  • 3.7 广域网 (答案见原书 P116)
  • 临淄网站制作首选公司seo排名需要多少钱
  • k8s-部署单master节点
  • Python 2025:量子计算编程的新前沿
  • 二级学院网站建设自评报告互联网营销公司有哪些
  • 做网站滨州现在写博客还是做网站
  • 基于 Service Worker 的图书馆资源缓存技术研究
  • php网站后台验证码不显示哈尔滨教育云平台网站建设
  • 银行门户网站是什么意思网页设计代码中字体的颜色如何改
  • 【代码的暴力美学】-- C语言基础编程题_1
  • Java 架构师系列:JVM 与 AI 负载的优化策略
  • 数据分析-Excel-常用函数
  • Python 文件操作
  • Java 大视界 -- Java 大数据机器学习模型在电商产品销量预测与库存优化管理中的应用
  • 陕西开龄建设网站浙江省建设厅网站如何查安全员
  • 使用 Jenkins 的流水线项目实施 CI/CD
  • 网站建设平台安全问题有哪些方面做网站自动赚钱吗
  • (八)掌握继承的艺术:重构之路,化繁为简
  • 文成做网站国外网站如何做推广
  • 云栖2025 | 阿里云AI搜索年度发布:开启Agent时代,重构搜索新范式
  • 让每次语音唤醒都可靠,公牛沐光重构可观测体系
  • 黄峥的成功之道:重构电商版图的创新密码
  • 数字大健康崛起:艾灸机器人重构就业生态,传统与科技如何共生?
  • 得物笔试题
  • Xenium空间转录组实战 | Xenium Explorer 多样本拼片拆分 ROI 区域圈选
  • 对称加密和非对称加密算法的区别
  • 下载了模板如何做网站太原seo推广
  • 微算法科技(NASDAQ MLGO)探索全同态加密与安全多方计算融合,开启区块链隐私执行新时代
  • JSNES游戏模拟器在 Node.js 环境下的测试使用及高清显示优化