图解五种I/O模型

企业微信-审批控件中的外部选项的应用全流程完美解决方案 完美解决企业微信所有JS-SDK调用问题 完美解决苹果和PC端不适配的问题 阅读详情

原文见 http://www.quora.com/Computer-Programming/How-is-asynchronous-IO-implemented-in-programming-languages

带下划线的部分是我的理解和译注


有五种I/O模型。

下图针对网络I/O,但磁盘I/O等其它I/O形式都是类似。


1,阻塞I/O模型

请求无法立即完成则保持阻塞。

整个过程分为两个阶段:

阶段一是等待数据就绪,网络I/O的情况就是等待远端数据陆续抵达;磁盘I/O的情况就是等待磁盘数据从磁盘上读取到内核态内存中。

阶段二是数据拷贝,出于系统安全,用户态的程序没有权限直接读取内核态内存,因此内核负责把内核态内存中的数据拷贝一份到用户态内存中。

理解这两个阶段非常重要,后续I/O模型的演变都是针对这两个阶段进行不同改造。


2,非阻塞I/O模型

请求不会阻塞, 而是立即返回错误码(EWOULDBLOCK) 
(通过调用fcntl,参数置为O_NONBLOCK)

阶段一频繁轮询的话,也很耗费CPU时间

这种方式对单个I/O请求意义不大,但给I/O多路复用铺平了道路.


3,I/O多路复用模型

调用 select / poll  该方法由一个用户态线程负责轮询多个sockets,直到某个阶段一的数据就绪,再通知实际的用户线程执行阶段二的拷贝.

通过一个专职的用户态线程执行非阻塞I/O轮询,模拟实现了阶段一的异步化



4,信号驱动I/O模型

阶段一演变为异步,由内核托管,应用程序只需告知内核,当阶段一数据就绪时向应用程序发出 SIGIO信号


至此为止,前述4种模型的阶段二仍是处于block状态的


5,异步I/O模型

告知内核,当整个过程(包括阶段一和阶段二)全部完成时,通知应用程序来读数据.


linux3.5已经有针对C的异步I/O API,细节略.


避开PFC设计大坑:从环路分析到参数整定的5个常见误区与解决方案 本文深入解析PFC电路设计中从环路分析到参数整定的5个常见误区,包括电感参数设计、小信号模型适用边界、电压环与电流环耦合效应等。通过实际案例和PSIM仿真数据,提供工程落地的解决方案,帮助工程师避开设计陷阱,提升电路性能与可靠性。 阅读详情

相关推荐

ads传统功放设计笔记(3)

传统功放设计的流程一般包括以下这些步骤: 1、明确设计目标 2、选择功放管子 3、确定静态工作点 4、设计偏置电路 5、判断稳定性 6、负载与源牵引 7、输入输出阻抗匹配 8、原理图优化 9、大信号仿真 10、版图设计 11、版图联合仿真 12、pcb设计 第二节我们设计仿真了功放的原理图。之后我们需要对版图进行设计和仿真。 10、版图设计 首先将S参数控件都打叉,还要去掉电源、源负载阻抗、地、芯片、电容。在原先电容和芯片的位置加上gap,设置好长度和间隔。之后在电源引脚、输入输出引脚和隔离的两端加上端口。

qq_40995480的博客 6029

Unix下的五种I/O模型图

Unix下共有五种I/O模型   l         阻塞I/O   l         非阻塞I/O   l         I/O复用(select和poll)   l         信号驱动I/O(SIGIO)   l         异步I/O(Posix.1的aio_系列函数)   l         阻塞I/O模型   应用程序调用一个IO函数,导致...

xiaomin1991222的专栏 259

【机器学习】实验2,基于回归分析的大学综合得分预测(完整代码实现+分析)

大学排名是一个非常重要同时也极富挑战性与争议性的问题,一所大学的综合实力涉及科研、师资、学生等方方面面。目前全球有上百家评估机构会评估大学的综合得分进行排序,而这些机构的打分也往往并不一致。在这些评分机构中,世界大学排名中心(Center for World University Rankings,缩写CWUR)以评估教育质量、校友就业、研究成果和引用,而非依赖于调查和大学所提交的数据著称,是非常有影响力的一个。

高丽大学人工智能硕士在读|专注大模型、RAG、OCR与AI工程实践 1976

Linux 五种IO模型详细图解

一、IO 简述 IO (Input/Output,输入/输出)即数据的读取(接收)或写入(发送)操作,通常用户进程中的一个完整IO分为两阶段:用户进程空间<–>内核空间、内核空间<–>设备空间(磁盘、网络等)。 IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。 LINUX中进程无法直接操作I/O设备,其必须通过系统调用请求kernel来协助完成I/O动作;内核会为每个I/O设备维护一个缓冲区。 对于一个输入(读取到内存)操作来说,进程IO系统调用后,

男儿当自强 672

FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译

FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译 什么是Firmament? Firmament (FMT) 是一款基于模型设计 (Model-Based-Design, MBD) 的开源自驾仪,可被用来快速构建无人机,无人车,无人船,机器人等平台的控制系统。 系统主要由两部分构成. FMT-Firmware: 一个基于C/C++开发的稳定、高性能的嵌入式系统. FMT-Model: 一个基于MATLAB/Simulink开发的仿真框架以及算法库. 昨天得知FMT开源飞控项目已经开

weixin_45786595的博客 2873

Zabbix华为交换机光衰告警

zabbix使用自动发现监控huawei网络设备光衰

qq_31651649的博客 4529

IO图详解

从网上找的一个io流的画图展示,方便自己更好的学习和理解

biglayout的博客 4291

Ubuntu22.04下,用Fast-LIVO2+3DGS重建桌面小物件:从点云到高清模型的保姆级避坑实录

本文详细介绍了在Ubuntu22.04环境下,使用Fast-LIVO2与3DGS技术进行桌面小物件三维重建的完整流程。从环境配置、数据采集到点云-图像对齐和3DGS训练,提供了针对小物件优化的参数设置和避坑指南,帮助用户实现媲美商业扫描仪的高清模型重建效果。

weixin_30897233的博客 399

最全五大I/O模型浅析—伪代码+动图+流程版本

0、了解同步异步阻塞非阻塞 1、阻塞I/O模型(BIO)-同步阻塞,伪代码,动图,流程 2、非阻塞IO模型-同步非阻塞,伪代码,动图,流程 3、IO多路复用模型(事件驱动)-同步阻塞,伪代码,动图,流程 select/poll/epoll的区别 4、异步I/O模型(AIO)-异步非阻塞,伪代码,动图,流程 5、信号驱动式I/O模型-阻塞,伪代码,动图,流程 ​

熊猫Ben的博客 1388

光学仿真案例(1) 铌酸锂非线性波导仿真模拟 FDTD仿真

在过去几年里,许多集成光子学应用往往需要多个相干可调谐光源,而且从外部激光器引入额外的光输入增加了芯片封装的复杂性,如果使用基于III-V族、氮化硅(SiN)或铌酸锂(LNO)的集成光源又大大增加了制造复杂性和成本。然而,通过非线性谐波相互作用产生的光源不需要额外的制造工艺来产生增益、反馈和外部电路,即可支持许多应用。在下面的案例中,演示了一种基于Luo[1]的铌酸锂波导频率转换集成系统。该案例主要仿真了利用温度调制实现高效相位匹配的铌酸锂纳米光子波导的二次谐波产生。

q895235273的博客 4145

Go基础:Go语言详细介绍,环境搭建,及第一个程序详解

Go语言是Google开发的开源编程语言,具有高效、简洁、并发性强等特点。文章从Go语言的诞生背景、核心特性及应用领域展开介绍,并详细说明了Windows、Linux和macOS下的环境搭建步骤,包括安装、环境变量配置及测试方法。最后通过“Hello, World!”程序解析Go语言基本语法,并演示了编译发布和跨平台编译功能。全文涵盖了Go语言从入门到实践的完整流程,适合初学者快速上手。

数据知道的博客 6800

I/O详解与五种网络I/O模型

五种网络I/O模型的介绍

dearQiHao的博客 2488

ElectrolyteGPT:首个电池电解液逆向设计的生成式 AI 系统 —— 算法原理与复现解析

数据驱动的重要性:1100 万→100 万的精心筛选,比单纯增大模型更有效领域适配:fLine 表示法、正则分词、化学感知的数据增强(SMILES randomization)都是关键小模型的力量:6M 参数在特定化学空间的表现,远超通用大模型在相同任务上的零样本能力条件生成的极限:10 维条件导致模型崩溃,提示我们需要更好的条件编码策略(如 diffusion guidance、RLHF-style 偏好优化)未来方向配方实验验证。

ASKCOS博客 123

图解I/O的五种模型

1.1 五种I/O模型 1)阻塞I/O 2)非阻塞I/O 3)I/O复用 4)事件(信号)驱动I/O 5)异步I/O 1.2 为什么要发起系统调用? 因为进程想要获取磁盘中的数据,而能和磁盘打交道的只能是内核, 进程通知内核,说要磁盘中的数据 此过程就是系统调用 1.3 一次I/O完成的步骤 当进程发起系统调用时候,这个系统调用就进入内核模式, 然...

weixin_30673715的博客 100

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

硬核图解:从BIO到AIO,五种I/O模型一网打尽!

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;模型5: AIOaio_read回调APPKERNEL模型4: 信号驱动sigactionSIGIOrecvfromAPPKERNEL模型3: 多路复用select就绪列表recvfromAPPKERNEL模型2: NIO轮询就绪后拷贝APPKERNEL。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1276

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

阻塞,非阻塞IO和同步,异步IO

在看ACE的过程中,难免对socket的一些特别的api有点质疑,于是不得不求助于unix网络编程,在看的过程中 终于懂得了阻塞,非阻塞和同步,异步的区别,以前认为非阻塞就是一中异步模式呢,哎,看来内功真的不行,太菜鸟了, 下面开始讲解一下他们的真正含义: Unix下的五种I/O模型是: 阻塞I/O 非阻塞I/O I/O复用(select 和poll) 信

sjx800688的专栏 765

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

UNIX系统的IO模型

IX系统的IO模型 博客分类: 操作系统 IOUNIX异步IO非阻塞IOIO复用 其实并非原创,只是摘录了Stevens的大作《UNIX网络编程》,写下来,一、加深理解和记忆;二、书是借的,记录一下备忘。感谢臻,借我此书一阅,受益匪浅。 6.2 I/O...

174

网络编程释疑之:同步,异步,阻塞,非阻塞

一讲到网络编程的I/O模型,总会涉及到这几个概念。问了很多人,没几个能清晰地讲出他们之间的区别联系,甚至在网络上也有很多不同的观点,也不知是中国文字释义的博大精深,还是本来这几个概念就是绕人不倦。今天我也来给大家讲解一下我对这几个概念的理解。 既然网络上众说纷纭,不如找个权威参考一下,这个权威就是《UNIX网络编程:卷一》第六章——I/O复用。书中向我们提及了5种类UNIX下可用的I/O

x526967803的博客 248

图解同步/异步,阻塞/非阻塞,五种模型之差

I/O模型解析:从阻塞到异步的关键概念 本文系统介绍了五种网络I/O模型的核心特性和实现机制。阻塞I/O简单但效率低下,进程全程挂起;非阻塞I/O通过轮询避免阻塞但消耗CPU;多路复用I/O(如epoll)实现单线程高并发管理;信号驱动I/O通过事件通知减少轮询,但信号可靠性存疑;异步I/O(如AI/O)由内核完成全部操作后回调,实现真正的非阻塞。文章通过流程图对比了各模型在"同步/异步"(消息通知)和"阻塞/非阻塞"(等待状态)维度的本质差异,指出多路复用和异步I/

Mine:19829102887@163.com 可以一起学习! 1059

图解UNIX的I/O模型

一、简述UNIX系统将所有的外部设备都看作一个文件来看待,所有打开的文件都通过文件描述符来引用。文件描述符是一个非负整数,它指向内核中的一个结构体。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。而对于一个socket的读写也会有相应的文件描述符,称为socketfd(socket描述符)。 在UNIX系统中,I/O输入操作(例如标准输入或者套接字的输入)通常包含以下两个不同的

Leo的博客 5831

I/O的五种模型总结

文章目录I/O的五种模型总结1. 五种 I/O 模型一次I/O的完成的步骤5种I/O 过程图解阻塞I/O非阻塞I/OI/O复用事件(信号)驱动I/O异步I/O(asynchronous I/O)2. 区分总结 I/O的五种模型总结 1. 五种 I/O 模型 阻塞I/O 非阻塞I/O I/O复用 事件(信号)驱动I/O 异步I/O 为什么要发起系统调用? 因为进程想要获取磁盘中的数据,而能和硬件...

UnknownPlayer的博客 700

Netty从0到1系列之I/O模型

摘要 本文从操作系统设计角度,深入解析了内核态与用户态的核心概念及其交互机制。文章通过公司管理层的类比,形象阐述了两种状态的权限差异:用户态如普通员工受限操作,内核态则拥有最高权限。系统调用是用户程序请求内核服务的唯一通道,文中以文件写入为例展示了完整的调用流程。 第二部分聚焦缓冲区技术,分析了其在解决CPU与I/O设备速度差异中的关键作用。详细对比了应用程序缓冲区(用户空间)与内核缓冲区(内核空间)的不同职责,并通过文件读写场景演示了数据在多层缓冲区间的流动过程。

编程技术圈 1584

深入理解网络非阻塞 I/O:NIO

该篇博文主要介绍的是 I/O 模型中的非阻塞 I/O -> NIO,简要分析了 NIO 非阻塞式 I/O 简要的模型,通过图解分析的方式告知它与 BIO 之间的区别,通过实践代码的方式来分析非阻塞 I/O 在系统调用中所涉及到的流程,同时也介绍了 C10K 问题给非阻塞式 I/O 带来的不利之处,最后介绍了上篇 BIO 博文与 NIO 之间的相关的区别以及 NIO 为什么速度会慢的原因,希望能够得到你的支持

vnjohn 博主 > 主线分享后端领域业务设计知识、源码思想、架构设计 1万+

深入理解网络阻塞 I/O:BIO

该篇博文主要介绍的是 I/O 模型中的阻塞 I/O -> BIO,简要分析了 BIO 流程图及相关系统函数调用,通过实践代码的方式来分析阻塞 I/O 在系统调用中所涉及到的流程,最后,介绍了相关联的系统函数:strace、socket、bind、listen、accept,希望能够得到你的支持,感谢三连

vnjohn 博主 > 主线分享后端领域业务设计知识、源码思想、架构设计 8472

图解I/O模型

什么是I/O? I/O就是计算机内存和外部设备之间拷贝数据的过程。   那么I/O模型主要解决的问题是什么呢?程序通过CPU,请求外部设备上的数据。而数据拷贝到内存里需要一定的时间,在这个时间里,程序是主动让出CPU时间?还是让CPU不断的去查数据是否是到了?   I/O模型就是用来解决这个决策问题。 I/O的过程? 首先我们要明白。I/O通讯涉及到两个非常重要的对象。   1.程序执行时的用户线程   2.操作系统内核   操作系统将进程的地址空间分为用户空间和内核空间,用户线程是没有办法从内核空间直接获

javaAnPou的博客 303
上一篇: d3js入门之数据绑定
下一篇: Learn CSS Positioning in Ten Steps
doraeimo
博客等级 码龄20年 11粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值