Linux开发讲课8--- linux的5种IO模型

news2024/11/29 0:37:48

一、这里IO是什么

         操作系统为了保护自己,设计了用户态、内核态两个状态。应用程序一般工作在用户态,当调用一些底层操作的时候(比如 IO 操作),就需要切换到内核态才可以进行

                

服务器从网络接收的大致流程如下:

1、数据通过计算机网络来到了网卡

2、把网卡的数据读取到 socket 缓冲区

3、把 socket 缓冲区读取到用户缓冲区,之后应用程序就可以使用

核心就是两次读取操作,五大 IO 模型的不同之处也就在于这两个读取操作怎么交互

二、同步/异步和阻塞/非阻塞

  • 同步/异步:这个是应用层面的概念,指的是调用一个函数,我们是等这个函数执行完再继续执行下一步,还是调完函数就继续执行下一步,另起一个线程去执行所调用的函数。关注的是线程间的协作。同步和异步关注的是消息通信机制。所谓同步,就是在发出一个调用时,自己需要参与等待结果的过程,则为同步,前面四个IO都自己参与了,所以也称为同步IO.异步IO,则指出发出调用以后,到数据准备完成,自己都未参与,则为异步.

  • 阻塞/非阻塞:这个是硬件层面的概念,阻塞是指 cpu “被”休息,处理其他进程去了,比如IO操作,而非阻塞则是 cpu 仍然会执行,不会切换到其他进程。关注的是CPU会不会“被”休息,表现在应用层面就是线程会不会“被”挂起

三、五种io模型

1.阻塞io

        应用调用recvfrom读取数据时,其系统调用直到数据包到达且被复制到应用缓冲区中或者发送错误时才返回,在此期间一直会等待,进程从调用到返回这段时间内都是被阻塞的称为阻塞IO。在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方式

                        

  • 应用进程向内核发起recfrom读取数据

  • 内核进行准备数据报(此时应用进程阻塞)

  • 内核将数据从内核负复制到应用空间。

  • 复制完成后,返回成功提示

2.非阻塞io

        当应用发起读取数据申请时,如果内核数据没有准备好会即刻告诉应用B,不会让B在这里等待,如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK错误码。非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符

                

       

  • 应用进程向内核发起recvfrom读取数据。

  • 内核数据报没有准备好,即刻返回EWOULDBLOCK错误码。

  • 应用进程再次向内核发起recvfrom读取数据。

  • 内核倘若已有数据包准备好就进行下一步骤,否则还是返回错误码

  • 内核将数据拷贝到用户空间。

  • 完成后,返回成功提示

3.io多路复用

        由一个线程监控多个网络请求(fd文件描述符,linux系统把所有网络请求以一个fd来标识),来完成数据状态询问的操作,当有数据准备就绪之后再分配对应的线程去读取数据

                

  • 应用进程向内核发起recvfrom读取数据

  • 内核进行准备数据报(此时应用进程阻塞)

  • 内核倘若已有数据包准备好则通知应用线程

  • 内核将数据拷贝到用户空间

  • 完成后,返回成功提示

下面给出一个应用系统和内核之间的流程图

                

4.信号驱动

        信号驱动IO是在调用sigaction时候建立一个SIGIO的信号联系,当内核准备好数据之后再通过SIGIO信号通知线程,此fd准备就绪,当线程收到可读信号后,此时再向内核发起recvfrom读取数据的请求,因为信号驱动IO的模型下,应用线程在发出信号监控后即可返回,不会阻塞,所以一个应用线程也可以同时监控多个fd

        ​​​​​​​        

  • 应用进程向内核发起recvfrom读取数据

  • 内核进行准备数据报,即刻返回

  • 内核倘若已有数据包准备好则通知应用线程

  • 应用进程向内核发起recvfrom读取数据

  • 内核将数据拷贝到用户空间

  • 完成后,返回成功提示

        下面给出一个应用系统和内核之间的流程图

        ​​​​​​​        

5.异步IO

        应用只需要向内核发送一个读取请求,告诉内核它要读取数据后即刻返回;内核收到请求后会建立一个信号联系,当数据准备就绪,内核会主动把数据从内核复制到用户空间,等所有操作都完成之后,内核会发起一个通知告诉应用

        ​​​​​​​        

  • 应用进程向内核发起recvfrom读取数据

  • 内核进行准备数据报,即刻返回

  • 内核收到后会建立一个信号联系,倘若已有数据包准备好,内核将数据拷贝到用户空间

  • 完成后,返回成功提示

四、五种io对比

        ​​​​​​​        

        可以看到,根据定义,前 4 种模型,在数据的读取阶段,全部都是阻塞的,因此是同步IO。而异步IO模型在整个IO过程中都不阻塞,因此是异步IO

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

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

相关文章

Excel条件格式的经典用法

目录: 一、自动设置填充颜色 二、设置Excel到期自动销毁 三、隔行自动标记 四、美化表格 五、快速突出显示重复值 六、标记空单元格 七、突出显示前N名单元格数值 八、表格添加新内容自动加边框 一、自动设置填充颜色 1、选择内容 首先我们选中表格的数据…

SEGGER Embedded Studio IDE移植embOS

SEGGER Embedded Studio IDE移植embOS 一、背景介绍二、任务目标三、技术实现3.1 获得embOS3.2 创建SES工程3.2.1 创建初始Solution和Project3.2.2 制作项目文件结构3.2.3 移植embOS库和有关头文件3.2.3.1 头文件3.2.3.2 库文件3.2.3.3 创建RTOSInit.c源文件3.2.3.4 OS_Error.c…

第1章 MySQL数据库概述

1.1 基本概念 数据库是什么? 存储数据的地方 DB:数据库(Database) 为什么要用数据库? 因为应用程序产生的数据是在内存中的,如果程序退出或者是断电了,则数据就会消失。使用数据库是为了…

【中学教资科目二】02中学课程

02中学课程 第一节 课程概述1.1 课程的分类 第二节 课程组织2.1 课程内容的文本表现形式2.2 课程评价 第三节 基础教育课程改革3.1 基础教育改革的目标3.2 新课改的课程结构 第一节 课程概述 1.1 课程的分类 学校课程有多种类型,其中最利于学生系统掌握人类所取得的…

收费4980的AI批量混剪,素材技术方法工具配套,详细拆解!

前几天有朋友跟我讲,他说有做旅游卡的,他们收费4980元,给500张卡,送AI批量混剪技术,问我们有没有? 批量混剪技术,这个其他早在2022年的时候我们就已经使用了。有开通抖音企业号的朋友都知道&am…

HarmonyOS角落里的知识—Stage模型应用程序

开发态包结构 在DevEco Studio上创建一个项目工程,并尝试创建多个不同类型的Module。根据实际工程中的目录对照本章节进行学习,可以有助于理解开发态的应用程序结构。 图1 项目工程结构示意图(以实际为准) 工程结构主要包含的文…

舒适佩戴,享受沉浸式音乐体验,西圣AVA2耳机体验

平时不管是听音乐,还是打电话,戴上一副耳机都可以让我们获得更好的隐私性,并且在公共场所,比如办公室、车厢里,也可以获得属于自己的空间。现在市面上耳机的选择非常多,音质、续航和佩戴的舒适度是我们选择…

2004年-2022年 全国31省市场分割指数数据

市场分割指数在经济学领域是一个关键的概念,特别是在评估不同区域市场一体化水平时。陆铭等学者深入研究了市场分割问题,并对市场分割指数给出了定义:它是一个衡量在相同时间点不同区域或同一区域在不同时间点的某类商品相对价格差异的指标。…

homework 2024.06.17 math, UI

A的宽度225 B的宽度150 这样画出来就比较标准, 225 * 2 150 * 3 2A 3B

技术驱动会展:展位导航系统的架构与实现

随着会展行业的快速发展,大型会展中心面临着如何提升参展者体验、提高招商效率的挑战。针对客户反馈的展馆面积大、展位查找困难等问题,维小帮提出一套智慧会展导航解决方案,旨在通过先进的室内导航技术提升会展中心的运营效率和参展者的满意…

驱动芯片退饱和保护(DESAT)

短路测试和双脉冲测试。 功率模块的短路承受能力的评估分为短路时间评估和短路能量评估两大类。短路时间由短路检测时间与短路关断时间共同构成 短路检测需要兼顾时效性与抗扰性能,要求系统能够及时响应,避免功率模块损坏。同时能够屏蔽开关过程的干扰…

JAVA每日总结day6.21

ok了家人们,今天我们学习了面向对象中关键字的使用和抽象类,话不多说,我们一起看看吧,(今天终于星期五了,芜湖!!!) 一,this和super关键字 1&…

【C++ | 重载运算符】一文弄懂C++运算符重载,怎样声明、定义运算符,重载为友元函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-06-21 2…

从艳彩山水到艳彩艺术 薛永年:郭泰来艳彩艺术填补了中国美术史的空白

薛永年先生 自6月12日开展以来,郭泰来现代艺术大展杭州如火如荼地进行着,吸引了众多艺术爱好者和专业人士前往。毫不夸张地说,总统和清洁工人都能在他的作品中找到自己心中的那一块共振带并与之产生强烈的共鸣,这便是郭泰来先生的…

如何禁止学生开启windows防火墙

信息课上,学生最喜欢开启windows防火墙来脱离电子教室的控制,如何禁止学生开启Windows防火墙,可以从以下几个方面入手: 一、使用组策略编辑器 打开组策略编辑器:按下WinR键,输入gpedit.msc并回车&#xf…

眼在手上标定结果应用:像素坐标转机械臂世界坐标

像素坐标转世界坐标主要用到如下的公式:其中boar2camera矩阵可由通过拍摄的标定板图片直接求解,为相机内参矩阵 camera_matrix: rows: 3 cols: 3 data: [428.3066849046146, 0, 675.2344606795484, 0, 431.0838735333736, 405.3373367752419, 0, 0, 1] …

cron.timezone

系统 date 数据库 show timezone插件 show cron.timezonealter system set cron.timezonePRC;show cron.timezone

NSSCTF-Web题目13

目录 [SWPUCTF 2022 新生赛]js_sign 1、题目 2、知识点 3、思路 [MoeCTF 2021]Do you know HTTP 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]js_sign 1、题目 2、知识点 base64编码、敲击码(tap code) 3、思路 页面没有什么,…

fataadmin导出Exel文件图片太大

// 导出图片过大处理 exportOptions: {ignoreColumn: [0, operate],onBeforeSaveToFile: function (data, fileName, type, charset, encoding, bom) {return $.fn.bootstrapTable.defaults.extend.savestatus;},onCellHtmlHyperlink: function ($cell, rowIndex, colIndex, hr…

vue2 + Lodop 制作可视化设计页面 实现打印设计功能(一)

前言: 此功能的来源来自于当时需要制作一个便于客户操作的打印设计功能,然后就有了这个项目。这个帖子主要是用于分享与谈论,相互学习。 目标: 能在vue页面中拖拽组件支持批量操作拖动通过拖拽组件列表里的组件到page进行添加实…