【Linux基础】Linux的5种IO模型详解

计算机基础 文件IO与网络IO 概述 本文知识点: 计算机I/O类型有那些 Linux6种文件I/O模型分别是那些 Linux5种网络I/O模型分别是那些 前言 I/O输入/输出(Input/Output),计算机中常见的设备。从设备的角度出发有键盘、鼠标、显示器、打印机、网络。网络对于计算机而言可以充当输入也可以充当输出。从软件角度出发I/O是计算机中处理数据的通道,文件I/O系统、网络I/O等都是系统软件的一部分。 文件I/O 在Linux系统中使用VFS屏蔽系统底层的文件系统差异。VFS全名Virtual Filesystem,作用是 阅读详情

引入

为了更好的理解5种IO模型的区别,在介绍IO模型之前,我先介绍几个概念

1.进程的切换

(1)定义

为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。即从用户态(较低的3G字节)切换到内核态(最高的1G字节),非常消耗系统资源。

(2)过程

  • 保存处理机上下文,包括程序计数器和其他寄存器。
  • 更新PCB信息。
  • 把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
  • 选择另一个进程执行,并更新其PCB。
  • 更新内存管理的数据结构。
  • 恢复处理机上下文。

2.进程的阻塞

(1)定义

正在执行的进程,由于期待的某些事件未发生,由运行状态变为阻塞状态。

(2)特点

  • 只有处于运行状态的进程(获得CPU)才能被阻塞
  • 阻塞是主动行为
  • 不占用CPU资源

3.文件描述符

(1) 定义

用于描述指向文件的引用的抽象化概念

(2) 特点

  • 一个非负整数
  • 本质是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表

4.缓存IO

  • IO的数据缓存在文件系统的页缓存中(先拷贝到内核的缓冲区)

  • 在应用程序和内核间多次数据拷贝,带来很大的CPU开销

5.并发与并行

  • 并发:同时进行的任务数

  • 并行:同时工作的物理资源数量(如CPU核数)

5种IO模型

  • IO的本质是socket的读取,数据先拷贝到内核的缓冲区中,然后拷贝到应用程序的地址空间(进程)

1.BIO(blocking IO):同步阻塞 I/O

(1)过程

这里写图片描述

分析:从上图可以看到在整个过程中,当用户进程进行系统调用时,内核就开始了I/O的第一个阶段,准备数据到缓冲区中,当数据都准备完成后,则将数据从内核缓冲区中拷贝到用户进程的内存中,这时用户进程才解除block的状态重新运行。

(2)实例

  • Blocking I/O是在I/O执行的两个阶段都被block了。

  • 例如:我要去饭堂吃饭,这时饭堂的人很多,我就得排队买饭,排队的时间被浪费了,

(3)特点

  • 能够及时返回数据,无延迟
  • 性能下降

2.NIO(nonblocking IO):同步非阻塞 I/O

(1)过程

这里写图片描述

分析:从上图可以看到在I/O执行的两个阶段中,用户进程只有在第二个阶段被阻塞了,而第一个阶段没有阻塞,但是在第一个阶段中,用户进程需要盲等,不停的去轮询内核,看数据是否准备好了。

(2)实例

  • nonblocking I/O是在I/O执行的第二个阶段(数据复制)被block了,而第一个阶段并未阻塞(数据准备)。

  • 例如:我要去饭堂吃饭,这时饭堂的人很多,一般来说我需要排队买饭,但我们饭堂的管理最近变的比较人性化,你点完饭后,会给你一个号码,但饭堂噪声很大,我不得不频繁的询问我的饭是否做好了,但是我可以利用之前排队的时间去买瓶饮料喝!

(3)特点

  • 拷贝数据的整个过程,进程仍然是阻塞的
  • 需要不断询问数据是否准备好了
  • 能够在等待任务完成的过程中处理其他事件
  • 由于需要轮询,所以延迟会增加

3.多路复用IO( IO multiplexing)

(1)过程

这里写图片描述

分析:

  • 从上图可以看到在I/O复用模型中,由于同步非阻塞方式需要不断主动轮询,轮询占据了很大一部分过程,轮询会消耗大量的CPU时间,而 “后台” 可能有多个任务在同时进行,

  • 如果循环查询多个任务的完成状态,只要有任何一个任务完成,就去处理它。轮询不是进程的用户态。这时 “IO 多路复用”就出现了。即UNIX/Linux 的 select、poll、epoll,

  • IO多路复用是阻塞在select,epoll这样的系统调用之上,而没有阻塞在真正的I/O系统调用如recvfrom之上。

  • 从整个IO过程来看,他们都是顺序执行的,因此可以归为同步模型(synchronous)。都是进程主动等待且向内核检查状态

(2)实例

  • 多路复用I/O执行的两个阶段用户进程都是阻塞的,但是两个阶段是独立的。

  • 例如:我要去饭堂吃饭,这时饭堂的人很多,点完饭后,我会拿到一个号码,以前我不得不频繁的询问我的饭做好了没,但是最近饭堂安装了一块电子显示屏,你的饭好了就会在屏上显示出来,这时候我就不用频繁的去问了,直接看电子显示屏就醒了,然后我就可以利用这个时间去超市买个牙膏了。

(3)特点

  • select/poll调用后会阻塞进程,但可以同时阻塞多个IO事件操作(文件描述符),有数据可读或可写(就绪事件),就通知用户进程。

  • select 需要每次注册事件(轮询),而epoll不需要每次注册事件(没有轮询,回调函数)

  • IO多路复用阻塞在select/epoll的系统调用之上的,而真正的IO系统调用如recvfrom是非阻塞的。

(4)适用场景

  • 服务器需要同时处理多个处于监听状态或连接状态的套接字

  • 服务器需要处理多种网络协议的套接字

4.信号驱动I/O( signal driven IO)

(1)过程

这里写图片描述

分析:从上图可以看出,只有在I/O执行的第二阶段阻塞了用户进程,而在第一阶段是没有阻塞的。该模型在I/O执行的第一阶段,当数据准备完成之后,会主动的通知用户进程数据已经准备完成,即对用户进程做一个回调。该通知分为两种,一为水平触发,即如果用户进程不响应则会一直发送通知,二为边缘触发,即只通知一次。

(2)实例

  • 信号驱动I/O执行的第一阶段阻塞,而第二阶段不阻塞。

  • 例如:我要去饭堂吃饭,这时饭堂的人很多,点完饭后,我会拿到一个号码,虽然说饭堂安装了一块电子显示屏,但我在玩手机时还不得不抬头看一下显示屏上有我的号码没,最近饭堂买了一个大喇叭,哪个号码好了,卖饭的阿姨就会用喊,虽说饭堂有点吵,但这个声音还是可以听到的,这样我就可以专心的低头玩手机了。

5.异步 I/O(asynchronous IO)

(1)过程

这里写图片描述

分析:从上图可以看出,在该模型中,当用户进程发起系统调用后,立刻就可以开始去做其它的事情,然后直到I/O执行的两个阶段都完成之后,内核会给用户进程发送通知,告诉用户进程操作已经完成了。

(2)实例

  • 异步 I/O执行的两个阶段都不会阻塞。

  • 例如:我要去饭堂吃饭,估计这会饭堂的人很多,但最近我们饭堂可以叫外卖了,这样就省事多了,我直接打个电话,订份饭送到我们宿舍,而我现在就可以利用原来去饭堂路上和等饭的时间写博客了。

  • 这就是同步和异步的区别,原来我得亲自去饭堂买饭,而现在我可以在宿舍叫外卖。

(3)特点

  • 读写操作由内核完成,完成后内核将数据放到指定的缓冲区,通知应用程序来取。

总结

这里写图片描述

  • 阻塞IO和非阻塞IO的区别:数据准备的过程中,进程是否阻塞。

  • 同步IO和异步IO的区别:数据拷贝的过程中,进程是否阻塞。

PX4飞控神经网络控制:从仿真到嵌入式部署实战 神经网络控制正逐步革新传统PID在无人机领域的统治地位。通过将深度学习模型部署到PX4飞控硬件,实现了从传感器数据直接生成电机指令的端到端控制。这种架构依赖TensorFlow Lite Micro等轻量级推理框架,在STM32等嵌入式处理器上可达到93μs级推理速度。关键技术突破包括:基于NVIDIA Isaac Gym的高效仿真训练、模型量化压缩技术(如8位整数量化)、以及与PX4原生安全架构的无缝集成。该方案在mRobotics Pixracer Pro等硬件上验证了可行性,为无人机姿态控制、视觉导航 阅读详情

相关推荐

检索增强世界模型(R-WoM)原理与应用实践

世界模型是AI系统理解环境的核心技术,通过构建环境的内部表示实现状态预测和行动规划。传统方法基于RNN或VAE等神经网络,而检索增强世界模型(R-WoM)创新性地引入检索机制,结合外部记忆库提升系统性能。这种架构突破模型参数限制,使AI能像人类一样利用历史经验解决问题,在游戏AI、虚拟助手等场景表现优异。关键技术包括FAISS相似性搜索、分层记忆管理和动态检索策略,其中Transformer编码器和GRU动态模型的组合实现高效环境建模。实践表明,该方法可提升47%的战术多样性,加快32%的应急响应速度。

weixin_42676876的博客 341

Linux 中的五种 I/O 模型

阻塞 I/O 模型、非阻塞 I/O 模型、I/O 复用模型、信号驱动 I/O 模型、异步 I/O 模型

We choose to go to the moon in this decade and do the other things, not because they are easy, but beacase they are hard. 2008

基于Dify1.9知识库流水线模板的思考——图像和表格数据处理

本文探讨了Dify1.9知识库流水线中LLM节点对文档图像/表格增强处理的优化方案。针对当前仅在内容后追加说明的简单做法,提出了结构化标注的改进方法:通过唯一ID和注释块标记图像/表格及其描述,确保内容可精准对齐。文章详细阐述了该方案的解析处理流程、数据结构化表示方法,以及在RAG检索和文档还原中的具体应用。关键经验包括:必须结构化标注非文本内容、LLM增强的必要性、语义向量化处理等。该方案解决了原始方法在内容重排、相似元素区分和检索精度等方面的问题。

roseey的专栏 1440

深入理解linux五种IO模型

当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。在Linux的缓存IO 机制中,操作系统会将 IO 的数据缓存在文件系统的页缓存( page cache )中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。数据准备好后,从内核拷贝到用户空间,IO函数返回成功指示。

m0_74282605的博客 386

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析

在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高

weixin_28630185的博客 342

基于FPGA的函数信号发生器设计

设计采用波形查找表和相位累加器的方法实现DDS,查找表的数据位宽为8位,采样点数为4096。波形产生范围是100Hz-20MHz,最小频率间隔为1Hz,用8个数码管显示频率,可产生正弦波、方波、三角波,波形用两个led显示,select信号控制,全灭为正弦波,一亮一灭为方波,全亮为锯齿波。为了使频率和相位便于调节,用3个拨码开关控制步进,用8个led显示状态。

FPGA入门到跑路 5636

Linux五种IO模型

在Linux系统中,实际上所有的I/O设备都被抽象为文件这个概念,一切皆文件无论是磁盘、网络数据、终端,还是进程间通信工具(如:管道pipe)等都被抽象为文件的概念。这种设计使得 I/O 操作可以通过统一的文件描述符(File Descriptor, FD)来管理。在Linux操作系统中的一切都被抽象成了文件,那么一个打开的文件是如何与应用程序进行对应呢?解决方案是使用文件描述符,当在进程中打开一个现有文件或者创建一个新文件时,内核向该进程返回一个文件描述符,用于对应这个打开/新建的文件。

m0_58063650的博客 1118

点云从入门到精通技术详解100篇-基于 CBCT 与口内扫描数据的牙齿点云配准

口扫生成的三维牙模型只包含牙冠结构,容易受到唾液、食物残留等杂质的干扰。像精度,但其扫描成本较高,在公立医院的普及率较低。此外,口扫探入式的体。完整、精确的牙齿信息,有助于医生更好地进行数字化辅助诊疗,提高手术的预。可以表示上颌骨、下颌骨、牙冠以及牙根的位置和形状,但其扫描分辨率较低,精配准前实现粗略的预配准来确定点云间的初始位置,为精配准提供良好的配准。该算法通过计算点对间的距离确定源点云中的某一点在目标点云中的对应。算两点之间的欧氏距离,运算量较大,而且由于算法只考虑点集间的距离而忽略。

getusushu的博客 1641

Linux中5种IO模型

同步/异步,阻塞/非阻塞,Linux中5种IO模型,BIO、NIO、AIO

weixin_45819295的博客 2804

12.工具高级参数CogCalibNPointToNPointTool

CogCalibNPointToNPointTool是一种多点2D坐标校正工具,用于将图像像素坐标转换为物理世界坐标。该工具通过两组点(图像坐标点和物理坐标点)计算最佳转换关系,并将结果保存供后续使用。操作步骤包括获取图像、添加坐标点对、计算转换参数。校正结果会显示平移、缩放、旋转等参数及RMS误差值,较大的误差可能表明点位置不准确或自由度不足。该工具广泛应用于机器视觉领域,通过9点标定等案例可验证坐标转换的准确性并优化参数设置。

205

STM32G0/G4无刷电机硬件设计与FOC控制实现

无刷直流电机(BLDC)和永磁同步电机(PMSM)的矢量控制依赖于高精度电流采样、实时SVPWM调制与闭环PI调节等核心技术。其底层实现需兼顾电机本体建模、坐标变换(Clark/Park)、死区补偿及硬件资源约束。STM32G0系列凭借CORDIC协处理器与超低功耗特性,适用于成本敏感型有感FOC应用;而STM32G4集成运放、FMAC滤波器与高级定时器,可支撑高性能无感控制与多源传感融合。该技术广泛应用于机器人关节、智能云台、伺服驱动等场景,是嵌入式电机控制工程师必须掌握的工程化落地能力。

weixin_35751412的博客 122

Linux——五种IO模型

send则是我发送消息,对方接受消息,当对方的接受缓冲区满了,也会造成阻塞,直到对方接收缓冲区有空间了,才可以发送过去。在I/O中,我们大部分时间是在等,比如你调用了scanf(),当前进程就在等待你的输入,你输入完毕后,把输入数据拷贝到内存中,才会继续执行。为了理解五种IO模型,我们来看个钓鱼的例子,钓鱼 = 等 + 钓 ,这里可以把钓看做是拷贝,钓都是一样的,但是等的过程不相同。其中,阻塞、非阻塞、信号驱动、多路复用都是同步IO,他们都参与了IO的过程,要么等了、要么拷贝了、或者都做了。

kkbca的博客 1527

27、超声成像技术与原理全面解析

本博客全面解析了超声成像技术与原理,涵盖声学材料特性、超声成像系统的基本概念与组成、关键技术如多普勒和聚焦技术、超声换能器的设计与原理、图像处理方法、系统校准与质量控制,以及超声成像的应用领域和发展趋势。旨在为医学诊断、工业检测和海洋声学等领域的研究人员和工程师提供深入的技术参考和指导。

z2a3b4c5d的博客 496

5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度、环境不一样。所以,我们先说明基本的IO操作及环境。本文是在《UNIX网络编程 卷1:套接字联网API》6.2节"I/O 模型 "的基础上,即UNIX/LINUX环境下的网络 IO环境下的理解,它里面给出的例子是读取(接收)网络UDP数据。下面简单写写自己对这些IO...

tjiyu的博客 3万+

NTscan扫描工具

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Linux:五种IO模型

IO其实就是“input”和“output” 尤其在网络部分,IO的特性非常明显!!

weixin_51142926的博客 6124

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Linux】五种IO模型

本篇文章会讲解五种IO模型,包括阻塞IO、非阻塞IO、信号驱动IO、多路转接以及异步IO。

℉f的博客 4413

Linux-基础IO

在刚开始学习Linux的时候,我们记住了Linux下一切皆文件,我们通过这篇文章来深入了解Linux下文件的构成及应用。

欢迎来到阿熊的blog~~ 2703

Linux内核中的IO模型详解

IO模型是Linux内核中处理输入输出的核心机制,它决定了应用程序如何与外设、文件、网络等进行数据交互。不同的IO模型有不同的特点和适用场景,理解这些模型对于开发高性能网络应用和系统级程序至关重要。本文将深入探讨Linux内核中的各种IO模型,包括阻塞IO、非阻塞IO、IO多路复用、信号驱动IO和异步IO等。

jiang_style的博客 2794

【Linux网络】五种IO模型与非阻塞IO

本文聚焦操作系统与 Linux 网络编程核心 IO 体系,从 IO 最底层的本质概念入手,拆解 IO 执行的两大核心步骤,解释 IO 运行低效的根本原因,并给出优化 IO 效率的核心思路。为了降低抽象概念的理解难度,全文采用钓鱼生活化案例类比业界通用的五种经典 IO 模型,依次讲解阻塞 IO、非阻塞 IO、信号驱动 IO、IO 多路复用、异步 IO 的运行逻辑,同时精准界定同步 IO 与异步 IO的判定标准,搭配可直接编译运行的 C 语言代码完成信号驱动 IO、POSIX 异步 IO 的实操演示。

艾莉丝努力练剑的博客,感谢大家一直以来的对艾莉丝的支持和鼓励,uu们如果对C/C++方向感兴趣的话,可以通过艾莉丝主页的微信名片加艾莉丝的好友,和努力练剑的艾莉丝一起加油! 2697

【Netty系列】Linux下的5种IO模型大揭秘

【Netty系列】Linux下的5种IO模型大揭秘

Love Peace 1276

Linux的五种IO模型(形象实例详解)

目录 一、java的3中IO模型 BIO是阻塞IO模型,NIO是IO复用模型,而AIO是异步IO模型。 二、Linux的5种IO模型 简介 1、阻塞IO模型(blocking I/O) 2、非阻塞IO模型(noblocking I/O) 3、信号驱动IO模型(signal blocking I/O) 4、IO复用模型(I/O multiplexing) 5、异步IO模型(asyn...

方才coding 3060

Linux 五种 IO 模型详解

IO模型是否阻塞是否异步编程复杂度适用场景阻塞IO是否简单小型或单线程程序非阻塞IO否否较复杂需避免阻塞,轮询管理场景IO复用阻塞(内核)否中等高并发网络服务器信号驱动IO否是复杂异步事件通知场景异步IO否是很复杂高性能异步IO场景如果你需要,我还能帮你写一段示例代码演示不同模型的用法,或者帮你理解哪个模型更适合某种具体需求。你觉得怎么样?Linux 服务器运维常用命令大全 – 菜鸟-创作你的创作。

wangjinjin180的博客 725

【LInux网络】五种IO模型与高级IO概念 及 非阻塞IO详解

本篇博文对【LInux网络】五种IO模型与高级IO概念 及 非阻塞IO详解做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~

2301_77954967的博客 1217
上一篇: 链表中倒数第k个节点
下一篇: 深入剖析ThreadLocal实现原理以及内存泄漏问题
It_BeeCoder
博客等级 码龄10年 967粉丝 238原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值