[Linux]五种IO模型(图文讲解+故事讲解)

news2024/7/31 4:41:49

目录

一、对IO的理解:等+拷贝

拷贝

二、五种IO模型(解释其概念)

1.阻塞IO

2.非阻塞IO

3.信号驱动IO

4.IO多路复用

5.异步IO

 IO速度比较

三、一个故事让你了解五种IO模型

四、同步VS异步   阻塞VS非阻塞 

同步VS异步

阻塞VS非阻塞 


一、对IO的理解:等+拷贝

  • 等待外设就绪在进行I/O操作时,由于外设(如硬盘、网络设备等)的速度通常远低于CPU的速度,因此CPU在执行I/O指令后往往需要等待外设完成操作。这种等待是I/O操作中的一个基本且常见的特性。
  • 在现代操作系统中,为了提高CPU的利用率,通常会使用中断(Interrupt)和DMA(直接内存访问)等技术来管理I/O操作,使得CPU在等待I/O操作完成期间可以执行其他任务。但是,从应用程序的角度来看,I/O操作仍然是一个“等待”的过程。(备注:中断是一种硬件或软件生成的信号,用于中断正在执行的程序,将控制权转移到处理中断的程序上,DMA是一种机制,允许输入/输出设备直接访问系统内存,而无需通过处理器的干预)

拷贝

        拷贝数据:在I/O操作中,数据通常需要在不同的存储介质或内存区域之间移动。这种移动过程本质上就是数据的拷贝。

二、五种IO模型(解释其概念)

1.阻塞IO

在内核将数据准备好之前,系统调用将会一直等待,所有的套接字, 默认都是阻塞方式.阻塞IO是最常见的IO模型。

2.非阻塞IO

也称为非阻塞轮询式IO,如果内核未将数据准备好,系统调用不会等待阻塞,会直接返回,且返回的是EWOULDBLOCK错误码。注意:使用非阻塞IO,一般要进行轮询操作,即反复的进行IO操作(如读写文件等操作,看看文件描述符是否已经就绪)直到操作完成,这对CPU是一个很大的消耗,一般只有特定的场景才使用。

3.信号驱动IO

内核将数据准备好之后,发送SIGIO信号通知应用程序进行IO操作。允许应用程序在等待IO操作完成时执行其他任务。

4.IO多路复用

同时监视多个IO操作的技术,它可以提高程序的效率,能够同时等待多个文件描述符的就绪状态.,最常见的IO多路复用机制是selectpollepoll(主要在Linux上),这些机制允许单个线程或进程监视多个文件描述符,以查看是否有IO操作准备就绪。一旦有IO操作就绪,程序就可以执行相应的读写操作,而不会阻塞整个程序。

5.异步IO

异步IO是最高效的IO模型之一。在异步IO模型中,应用程序发起一个IO操作,并立即返回继续执行后续操作,而不会阻塞当前线程。当IO操作完成时,内核会通知应用程序,通常是通过回调函数或事件。这样,应用程序可以在不牺牲性能的情况下,同时处理多个IO操作。 

 IO速度比较

从速度角度来看,异步IO > IO多路复用 > 信号驱动IO > 非阻塞IO > 阻塞IO。然而,这种比较并不是绝对的,因为实际速度还受到多种因素的影响,如操作系统的支持、硬件性能、IO操作的类型(如磁盘IO、网络IO)以及应用程序的具体实现等。因此,在选择IO模型时,需要根据实际应用场景和需求进行综合考虑。

三、一个故事让你了解五种IO模型

在一条河边有五个人在钓鱼:

人分别为:张三(代表阻塞IO),李四(代表非阻塞IO),王五(代表信号驱动IO),赵六(代表IO多路复用),田七(代表异步IO)

河:操作系统,鱼竿:文件描述符,鱼漂:就绪条件,人:进程/线程

(阻塞IO)张三钓鱼:

张三是一个热爱钓鱼享受钓鱼的人,他钓鱼会一丝不苟的盯着鱼漂,只要鱼漂一下沉他立马把鱼掉上来,在这区间他不会做其他与钓鱼无关的事。

(非阻塞IO)李四钓鱼:

李四钓鱼没有张三那么真正,他就是享受这一个过程的,他一会玩玩手机,一会看看鱼漂看看有没有鱼上钩,一会和旁边的钓友聊聊天,一旦鱼上钩,鱼漂一沉,鱼竿一动,他就把鱼钓上来。

(信号驱动IO)王五钓鱼:

王五虽然喜欢钓鱼,但他比较懒,他既不想眼睛盯着鱼竿,也不想手里拿着鱼竿,于是他在鱼竿上挂了一个铃铛,一但鱼上钩时鱼漂下沉,鱼竿摇动,铃铛就会响,他就把鱼钓上来,在这区间王五可以干任何事,刷抖音,看看书,只有铃铛响,他能听到把鱼钓上来就行。

(IO多路复用)赵六钓鱼:

赵六非常喜欢钓鱼,而且他非常有钱,别人钓鱼带一套装备(鱼竿,鱼漂等工具),一次只能钓到一条鱼,他嫌弃这样钓鱼慢,于是他带了100套装备,把100个鱼竿架好,然后他就在这100个鱼竿面前来回走动,一旦鱼漂下沉,鱼竿晃动,他到这个鱼竿面前把鱼钓上来。

(异步IO)田七钓鱼:

田七是一个钓鱼爱好者同时也是一个公司老板,他很忙,但他又想钓鱼,于是他钓鱼就放挂好鱼漂,架好鱼竿,他就开车回公司忙去了,让司机帮他钓,调到鱼了就打电话通知他,他忙完了就开车来接他和鱼。

四、同步VS异步   阻塞VS非阻塞 

同步VS异步

  • 同步:发出一个调用时,没有得到调用结果是,该调用不会返回,直到得到调用有结果时才会返回。即:调用者会主动的等待调用结果。
  • 异步:发出一个调用时,该调用直接返回,没有返回结果,调用者不会主动等待调用结果,被调用者会通过状态、通知来通知调用者,或通过回调函数处理这个调用。

阻塞VS非阻塞 

  • 阻塞调用是指调用结果返回之前,当前线程会被挂起. 调用线程只有在得到结果之后才会返回.
  • 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1918383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常用录屏软件,分享这四款宝藏软件!

在数字化时代,录屏软件已经成为我们日常工作、学习和娱乐中不可或缺的工具。无论你是需要录制教学视频、游戏过程,还是进行产品演示,一款高效、易用的录屏软件都能让你的工作事半功倍。今天,就为大家揭秘四款宝藏级录屏软件&#…

深度|不同数据系统中的“一致性”(Consistency)含义的区别

“你们的系统能实现强一致性吗?”作为过去几年一直在开发流处理系统的从业者,我经常被问到这个问题。我时常想自信地推销我们的产品,但现实情况是,回答这个问题并不简单。其中的挑战并不在于问题本身,而在于 “一致性”…

【芯片方案】珠宝手机秤方案

珠宝手机秤作为一种便携式电子称重设备,因其小巧、便携、精度高等特点,广泛应用于各种需要精确称重的场景。可能这个目前在国内使用的人比较少,但在西方国家珠宝手机秤却是可以用来送礼的物品。因为珠宝手机秤的外观跟手机外观大多相似&#…

【数据结构】排序——快速排序

前言 本篇博客我们继续介绍一种排序——快速排序,让我们看看快速排序是怎么实现的 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 ​ 目录 …

Python高级(三)_正则表达式

Python高级-正则表达式 第三章 正则表达式 在开发中会有大量的字符串处理工作,其中经常会涉及到字符串格式的校验。 1、正则表达式概述 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、…

springboot企业培训管理系统-计算机毕业设计源码50804

摘要 本研究旨在开发一套高效、安全、易用的springboot企业培训管理系统。该系统致力于提升企业的培训管理效率,确保培训质量与效果的持续优化。通过整合先进的AI技术,在企业培训管理中发挥着不可或缺的作用。 通过采用Java作为主要开发语言,…

AI Earth——2020年中国建筑物高度CNBH数据产品(10m)

数据介绍: 复旦大学生命科学学院GC3S团队(吴万本博士、赵斌教授等)利用多源地球观测数据和机器学习技术,构建了中国第一个10米分辨率的建筑高度估计模型(CNBH-10m)。基于此模型建立了中国10米分辨率的建筑高度数据集。此数据集基于全天候地球观测(雷达、光学和夜光图像)…

USB PD SINK协议取电芯片不同品牌介绍对比-在选择PD SINK 协议芯片时,用户需要综合考虑各方面的因素,包括工作耐压、稳定性、兼容性等

PD SINK协议芯片是现代通信技术中的一项重要技术,它起着连接不同系统的桥梁作用。协议芯片内部集成了各种不同的通信协议,如蓝牙、Wi-Fi、以太网等,使不同设备之间的通信变得更加简单和高效。协议芯片推动了信息通信技术的发展。在过去&#…

赋能 Web3 与 AI 的未来,TARS 协议如何重塑去中心化生态?

TARS 协议如何在 Web3 生态中引领 AI 技术的变革?作为新兴的模块化 AI 平台,TARS 通过整合先进的 AI 模型和区块链技术,为用户提供了更加智能、安全和高效的解决方案。让我们一起回顾第 16 期 TinTinAMA 的精彩内容吧! 在 TinTinL…

1. openstack

openstack 一、云的简介1、优势2、类型2.1 根据提供的服务范围2.2 根据提供服务不同 二、openstack核心组件1、核心组件2、nova组件2.1 nova核心进程 3、glance组件4、cinder组件5、neutron组件6、swift组件7、cellometer组件8、keystone组件9、heat组件10、dashboard 一、云的…

超简单的通配证书签发工具,免费,无需安装任何插件到本地

常见的acme.sh 或者 lego等工具需要配置,安装不灵活,续签需要配置计划任务,签发单域名证书或者通配证书需要不同的指令和配置,繁琐,如果自己程序想要对接签发证书的api有的不支持,有的用起来繁琐。 最近发…

性价比高充电宝有哪些?充电宝十大最佳品牌大盘点!

在如今这个高度数字化的时代,我们的生活离不开各种电子设备,而充电宝作为保障电子设备续航的重要工具,其地位日益凸显。然而,面对市场上琳琅满目的充电宝品牌和产品,要挑选到一款性价比高的充电宝并非易事。在这篇盘点…

本地部署,Colorizer: 让黑白图像重现色彩的奇迹

目录 引言 什么是 Colorizer ​编辑​编辑 Colorizer 的特点 工作原理 应用场景 本地部署 本地运行 实验与结果 结语 Tip: 引言 自摄影术发明以来,黑白图像一直是记录历史和艺术创作的重要手段。然而,黑白图像虽然具备其独特的美…

idea中打开静态网页端口是63342而不是8080

问题: 安装了tomcat 并且也配置了环境,但是在tomcat下运行,总是在63342下面显示。这也就意味着,并没有运行到tomcat环境下。 找了好几个教程(中间还去学习了maven,因为跟的教程里面,没有maven,但…

2024年国企都在用哪些eHR人事系统?(附国企HR系统功能分享)

近年来,国家也一直在寻求国企改革上的突破。但是部分国有企业在经营过程中,出于历史和现实的多重影响,人力资源管理工作迟迟没有较大进展,还存在诸多不适应现代企业发展的弊端存在。随着科技进步,许多国企正转向创新的…

【昇思25天学习打卡营打卡指南-第二十三天】Pix2Pix实现图像转换

Pix2Pix实现图像转换 Pix2Pix概述 Pix2Pix是基于条件生成对抗网络(cGAN, Condition Generative Adversarial Networks )实现的一种深度学习图像转换模型,该模型是由Phillip Isola等作者在2017年CVPR上提出的,可以实现语义/标签到…

2024最新版pycharm安装激火教程,附安装包+激huo马,Python教程,pycharm安装包!!

PyCharm的安装 PyCharm 是一个专门为 Python 开发者设计的 IDE,它同样具有代码导航、重构、调试和分析等功能。PyCharm 支持多种项目类型,如普通项目、Python 测试项目、Django 项目等,并提供了大量的内置模板和插件,以帮助您更快…

【项目实战课】大语言模型提示词(Prompt)工程实战

欢迎大家来到我们的项目实战课,本期内容是《大语言模型提示词(Prompto)工程实战》。所谓项目课,就是以简单的原理回顾详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲解。 本课程内容 提示词…

自动化(二正)

Java接口自动化用到的技术栈 技术栈汇总: ①Java基础(封装、反射、泛型、jdbc) ②配置文件解析(properties) ③httpclient(发送http请求) ④fastjson、jsonpath处理数据的 ⑤testng自动化测试框架重点 ⑥allure测试报…

cuda安装使用问题,print(torch.cuda.is_available()),仍然输出false,如何解决?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…