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

目录

一、对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.rhkb.cn/news/374528.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023 年 GitHub 上最受欢迎的编程语言

JavaScript 仍然是使用最多的编程语言,在 Web 开发中占据重要地位。 被广泛用于 Web 应用程序开发,框架如 React 和 Angular 促进了单页应用程序的开发。 Node.js 的出现使其在后端编程中同样重要。 Python 由于其简单性和广泛的库,Pyth…

07-7.5.1 散列表的基本概念

👋 Hi, I’m Beast Cheng 👀 I’m interested in photography, hiking, landscape… 🌱 I’m currently learning python, javascript, kotlin… 📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

【测试开发】--安全渗透测试

1. 安全渗透 1.1 分类 web数据库安全web应用服务器安全(文件上传漏洞、文件包含漏洞)web客户端安全(XSS跨站攻击) 2. sql注入 2.1 sql注入介绍 sql注入在安全问题中排行榜首sql注入攻击是输入参数未经过滤,然后直…

MySQL的约束键多表查询

约束 概念 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据中数据的正确、有效性和完整性。 外键约束 概念 ​ 外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。 注意&#x…

最优化(10):牛顿类、拟牛顿类算法

4.4 牛顿类算法——介绍了经典牛顿法及其收敛性,并介绍了修正牛顿法和非精确牛顿法; 4.5 拟牛顿类算法——引入割线方程,介绍拟牛顿算法以及拟牛顿矩阵更新方式,然后给出了拟牛顿法的全局收敛性,最后介绍了有限内存BFG…

202-509SF 同轴连接器

型号简介 202-509SF是Southwest Microwave的连接器。这款连接器机身和法兰由不锈钢合金 UNS-30300 制成,螺纹接头则采用 5C360 黄铜合金。接触点采用 BeCu 合金,并经过镀金处理,以提供优异的导电性和耐腐蚀性。绝缘体则由 PTFE 氟碳或 ULTEM …

Backend - C# 的日志Lognet4

目录 一、安装 log4net 插件 (一)作用 (二)操作 (三)注意 二、配置 (一)配置AssemblyInfo.cs (二)配置log4net.config 1. 创建log4net.config文件&#xff08…

3.动态规划.基础

3.动态规划.基础 基础理论背包基础理论01背包完全背包多重背包 题目1.斐波那契数2.爬楼梯3.使用最小花费爬楼梯4.不同路径5.不同路径2 基础理论 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题&#xf…

【Linux】常见指令收官权限理解

tar指令 上一篇博客已经介绍了zip/unzip指令,接下来我们来看一下另一个关于压缩和解压的指令:tar指令tar指令:打包/解包,不打开它,直接看内容 关于tar的指令有太多了: tar [-cxtzjvf] 文件与目录 ...…

VSCode升级后不能打开在MacOS系统上

VSCode 在MacOS无法打开 版本 VSCode version: 1.91.0 (x64) 错误信息: MacBook-Pro ~ % /Users/mac/Downloads/FirefoxDownloads/Visual\ Studio\ Code.app/Contents/MacOS/Electron ; exit; [0710/142747.971951:ERROR:crash_report_database_mac.mm(753)] op…

RFID技术革新养猪业,构建智能化养殖场

RFID技术作为无线射频识别技术的一种,凭借着非接触、高效识别的特性,在养殖业行业中得到了广泛的应用,为构建智能化、高效化的养殖场提供了强大的技术支持,给传统养殖业带来了一场前所未有的技术变革。以下是RFID技术在养猪行业不…

Qt 网络编程 网络信息获取操作

学习目标:网络信息获取操作 前置环境 运行环境:qt creator 4.12 学习内容 一、Qt 网络编程基础 Qt 直接提供了网络编程模块,包括基于 TCP/IP 的客户端和服务器相关类,如 QTcpSocket/QTcpServer 和 QUdpSocket,以及实现 HTTP、FTP 等协议的高级类,如 QNetworkRe…

mysql判断时间段是否重合

mysql判断时间段是否重合 SELECT CASE WHEN t1.start_time < t2.end_time AND t1.end_time > t2.start_time THEN ‘重合’ ELSE ‘不重合’ END AS result FROM table_name t1, table_name t2 WHERE t1.id <> t2.id;

dolphinScheduler + hive + datax报错记录

1、参数错误 报错信息 [INFO] 2024-04-11 06:43:18.386 - [taskAppIdTASK-29-3301-84461]:[498] - after replace sql , preparing : insertoverwrite table mis_month partition (dt) select nvl(sl.slid , ) as id,--水量 IDnvl(sl.hh …

张量笔记(4):张量网络

张量分解通常是将高维张量分解成一系列较低维的张量&#xff0c;表示能力相对较低。而张量网络可以表示复杂的高维数据结构&#xff0c;通过连接多个张量形成网络结构&#xff0c;可以更灵活地表示和处理复杂的数据关系。本节主要介绍HT和TT网络。 2.5.1 HT分解——首先我们引入…

【软件测试工具】-抓包工具Fiddler使用讲解

Fiddler使用讲解 1.认识fiddler Fiddler是一个http协议调试代理工具&#xff0c;主要检查电脑和互联网之间的http通讯。&#xff08;抓包工具&#xff09; 特点&#xff1a;简单方便&#xff0c;比较灵活 工作原理&#xff1a; 当浏览器向服务器请求数据时&#xff0c;被Fiddl…

K8S 集群节点缩容

环境说明&#xff1a; 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233&#xff08;需下线&#xff09;192.168.99.2332C4Gwoker1.23.1720.10.24 1. K8S 集群节点缩容 当集群中有…

百数教学秘籍:三步走,轻松规划你的自动化计划任务

通过设定任务计划&#xff0c;用户可以轻松安排指定的功能插件或数据助手在特定时间自动执行&#xff0c;有效提高工作效率&#xff0c;还确保了数据的及时更新和处理。任务计划在应用启动时自动启动并在后台运行&#xff0c;无需用户持续监控&#xff0c;为用户带来极大的便利…

企业网站源码系统 自主快速搭建响应式网站 海量模版随心选择 带完整的源代码包以及搭建教程

系统概述 企业网站源码系统&#xff0c;是一款专为中小企业量身定制的网站建设解决方案。该系统基于先进的Web开发技术&#xff0c;融合了模块化设计理念和用户友好的操作界面&#xff0c;旨在帮助企业用户无需编程基础&#xff0c;即可轻松搭建出符合自身需求的响应式网站。通…

大语言模型基础

大语言基础 GPT : Improving Language Understanding by Generative Pre-Training 提出背景 从原始文本中有效学习的能力对于减轻自然语言处理中对监督学习的依赖至关重要。很多深度学习方法需要大量人工标注的数据&#xff0c;限制了它们在很多领域的应用&#xff0c;收集更…