0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍下这五种IO模型

Linux阅码场 来源:Linuxer 2020-06-03 15:53 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

面试的时候也许你被问到过IO模型,可能你知道有五种,可是却不一定能准确指出他们之间的关系,下面我们介绍下这五种IO模型

五种IO模型

阻塞IO

非阻塞IO

IO复用(select和poll)

信号驱动

异步IO(Posix.1 的 aio...系列函数)

备注

一个输入操作一般分为两个阶段:

等待数据准备好

把数据从内核拷贝到进程

一个套接字的输入操作,第一步是等待数据到达网络,当分组到达时,它被拷贝到内核中的某个缓冲区,第二步是将数据从内核缓冲区拷贝到应用缓冲区

那我们来分别看下这五种IO模型

阻塞IO模型

阻塞IO是最通用的IO模型,使用该模型接收数据时,在数据没有到之前程序会一直等待。例如函数recvfrom,内核会一直阻塞该请求直到有数据到才返回,如下图所示:

如上图所示,进程在调用recvfrom时,该系统调用直到数据到达且拷贝到应用缓冲区或出错才返回。那阻塞的时间就是从调用recvfrom开始到返回的这段时间,当进程返回成功指示时,应用进程开始处理数据报。

非阻塞IO模型

当把套接字设置成非阻塞方式时,即通知内核:当请求的IO操作非得让进程睡眠不能完成时,不要让进程睡眠,而应返回一个错误,直到数据准备好,并将数据拷贝到应用缓冲区返回成功指示,进程调用结束。如下图所示:

从图中我们可以看出,进程会反复调用recvfrom,前三次调用一直没有数据返回,因此立即返回一个EWOULDBLOCK错误,在第四次调用的时候,数据才准备好,并拷贝到了应用缓冲区,recvfrom返回成功指示,然后就时进程处理数据

当一个应用进程像这样对一个非阻塞描述字循环调用recvfrom时,我们称之为轮训。应用进程连续不断的查询内核,验证某操作是否准备好,这样会极大的浪费CPU的时间

IO复用模型

IO复用模型支持调用select或poll,会阻塞在select或poll上,而不是阻塞于真正的IO系统调用。阻塞在select调用,等待数据报套接口可读。当select返回套接口可读条件时,再调用recvfrom将数据拷贝到应用缓冲区。如下入所示:

通过阻塞IO模型和IO复用模型的对比,我们发现由之前的一次系统调用变成了两次系统调用,好像变差了,其实并没有,select可以等待多个描述字准备好,同时select可以设置超时时间。

信号驱动IO模型

信号驱动IO是让内核在描述字准备好时用信号SIGIO通知我们。首先允许套接口进行信号驱动IO,然后通过系统调用sigacation安装信号处理程序。此系统调用立即返回,进程继续工作,是非阻塞的。当数据报准备好被读时,为该进程生成一个SIGIO信号,随后在信号处理程序中调用recvfrom读取数据报,并通知主循环数据已经准备好被处理或者通知主循环让它来读取数据报,如下图所示:

异步IO模型

异步IO让内核启动操作,并在整个操作完成后(包括将数据从内核拷贝到用户空间)通知我们。如下图所示:

异步IO模型和信号驱动IO模型的主要区别是:信号驱动IO是由内核通知我们何时启动IO操作,而异步IO是由内核通知我们IO操作何时完成

五种IO模型的对比

通过上面对五种IO模型的介绍,我们发现前四种IO模型的主要区别点在于第一阶段,第二阶段基本相同:在数据从内核拷贝到调用者的缓冲区时,进程阻塞在recvfrom调用。异步IO模型的两个阶段是和前四种不同的,对比如下图所示:

我们发现五种IO模型没有提到同步IO模型,却提到了异步IO模型,这是为什么?

首先我们看下Posix对同步IO和异步IO的定义:

同步IO操作引起请求进程阻塞,直到IO操作完成

异步IO操作不引起请求进程阻塞

我们可以发现,根据上面的定义,前四种模式:阻塞IO模型、非阻塞IO模型、IO多路复用模型和信号驱动模型,其实都属于同步IO模型,因为他们四个都会经历真正的IO操作(recvfrom)且阻塞了进程,只有异步IO模型与异步IO的定义匹配

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7348

    浏览量

    95016
  • 模型
    +关注

    关注

    1

    文章

    3818

    浏览量

    52265

原文标题:这些IO模型你都知道吗 - 五种常见IO模型介绍

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    华大九天Liberal IO精准K库解决方案介绍

    在芯片先进工艺持续迭代、接口场景日趋复杂的当下,IO单元已成为决定信号完整性、传输效率与设计可靠性的核心载体。从基础IO到高速IO、Flash IO等,多样化的接口形态对建模精度、场景
    的头像 发表于 04-13 16:11 192次阅读
    华大九天Liberal <b class='flag-5'>IO</b>精准K库解决方案<b class='flag-5'>介绍</b>

    如何基于现场需求选配PLC本地/远程IO

    很多刚接触工控的朋友,常常会被“本地IO”和“远程IO”这两个概念搞混。 它们到底有什么区别?在实际项目中又该如何选择?今天我们就来一次性说清楚。 什么是IO? 在深入讨论之前,我们先简单回顾一
    的头像 发表于 03-30 17:15 483次阅读
    如何基于现场需求选配PLC本地/远程<b class='flag-5'>IO</b>?

    可跨不同领域的异常检测通用模型UniOD介绍

    本研究提出了一可跨不同领域、适用于特征维度各异且特征空间异构的数据集的异常检测通用模型
    的头像 发表于 03-18 09:09 537次阅读
    一<b class='flag-5'>种</b>可跨不同领域的异常检测通用<b class='flag-5'>模型</b>UniOD<b class='flag-5'>介绍</b>

    三格电子一体式io和分体式io的区别#

    IO
    jf_68793483
    发布于 :2026年02月27日 14:15:48

    国内大星地数据大模型ai融合分析与应用分系统软件介绍

        虽未明确划分“星地数据大模型AI融合分析与应用”的大分系统,但北京华盛恒辉、北京木恒润、Anthropic、MetaAI和SpaceX等机构已通过关键技术突破与场景深耕,构建了具有代表性
    的头像 发表于 12-29 10:49 154次阅读

    大卫星运管中心大模型智能决策分系统软件的应用与未来发展

    卫星运管中心大模型智能决策分系统、北京木恒润卫星运管中心大模型智能决策分系统、洛克希德·马丁、诺斯罗普·格鲁曼及SpaceX等机构在该领域展现出显著技术积累与工程实践能力。以下为各主体相关系统的精要
    的头像 发表于 12-18 14:58 500次阅读

    大大模型支撑后勤保障方案生成系统软件的应用与未来发展

        在后勤保障领域,大以大模型或智能技术为核心支撑的系统方案显著提升了保障的智能化与效率,包括:北京华盛恒辉与木恒润的大模型驱动方案生成系统、英国HUMS健康与使用监控系统、以
    的头像 发表于 12-17 15:24 406次阅读

    浮点扩展指令集中定义的舍入模式

    本文主要描述浮点扩展指令集中定义的舍入模式,并介绍一些实现时要注意的地方。 舍入模式介绍 首先,在riscv-spec-v2.2的浮点指令集扩展部分一共定义了
    发表于 10-24 10:25

    远程IO不就是分布式IO?其实很多人都理解错了

    一、引言 在工业自动化和控制系统中,分布式io和远程io作为两常见的IO技术,各自具有独特的特点和优势,以下对远程io和分布式
    的头像 发表于 09-28 11:06 903次阅读
    远程<b class='flag-5'>IO</b>不就是分布式<b class='flag-5'>IO</b>?其实很多人都理解错了

    干货分享 | TSMaster IO功能使用指南—基于同星带IO设备的配置与操作步骤

    IO模块是一用于连接计算机系统或控制系统与外部设备之间的接口模块。数字IO模块用于处理二进制信号的输入和输出,它们可以接收和发送数字信号,通常用于控制逻辑开关、触发器和其他数字设备。模拟IO
    的头像 发表于 08-09 20:04 1212次阅读
    干货分享 | TSMaster <b class='flag-5'>IO</b>功能使用指南—基于同星带<b class='flag-5'>IO</b>设备的配置与操作步骤

    IO数采终端哪个好用?有什么推荐?

    对生产过程的实时监控和智能管理。市场上IO数采终端产品众多,以下是个值得推荐的品牌(排名不分先后): 1、物通博联:在工业物联网领域表现出色。其IO数采终端协议兼容性强,支持Modbus、OPCUA等上百
    的头像 发表于 08-07 14:53 1186次阅读
    <b class='flag-5'>IO</b>数采终端哪个好用?有什么推荐?

    FA模型的DataAbility的切换介绍

    ,Stage模型的DataShareExtensionAbility为系统API,只有系统应用才可以创建。因此,FA模型的DataAbility的切换,对于系统应用和三方应用策略有所不同。下面分别
    发表于 06-06 08:10

    FA模型的ServiceAbility的切换介绍

    的ServiceExtensionAbility为系统API,只有系统应用才可以创建。因此,FA模型的ServiceAbility的切换,对于系统应用和三方应用策略有所不同。下面分别介绍这两场景。 系统
    发表于 06-05 07:24

    FA模型绑定Stage模型ServiceExtensionAbility介绍

    FA模型绑定Stage模型ServiceExtensionAbility 本文介绍FA模型的三应用组件如何绑定Stage
    发表于 06-04 07:55

    如何将一个FA模型开发的声明式范式应用切换到Stage模型

    模型切换概述 本文介绍如何将一个FA模型开发的声明式范式应用切换到Stage模型,您需要完成如下动作: 工程切换:新建一个Stage模型
    发表于 06-04 06:22