Linux典型IO模型:阻塞、非阻塞、信号驱动、异步

news2024/12/25 4:23:18

目录

一、阻塞IO

二、非阻塞IO

三、信号驱动IO

四、异步IO

五、阻塞VS非阻塞(概念)

1.阻塞

2.非阻塞

3.区别与联系

六、同步VS异步(概念)

1.同步

2.异步

3.区别与联系


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就绪等待以及完成数据拷贝,完成后再通过信号通知进程。

注意:

(1)异步IO会告诉系统,需要对哪个描述符进行什么IO操作,要把IO操作的数据拷贝到哪块缓冲区,以及完成后通过什么信号通知进程。

(2)当进程收到信号,就表示IO已经完成,这时就可以直接对指定缓冲区中的数据进行处理。

优点:对系统资源利用非常高,效率也是最高。

缺点:流程复杂度也是最高。

五、阻塞VS非阻塞(概念)

1.阻塞

        为了完成某个功能,发起一个调用,若功能无法立即完成,则调用不返回一直等待。

2.非阻塞

        为了完成某个功能,发起一个调用,若功能无法立即完成,则报错返回。

3.区别与联系

        阻塞与非阻塞,都是讨论接口特性,表示一个函数在完成某个功能时,若无法立即完成,是否会立即返回。

六、同步VS异步(概念)

1.同步

(1)是一种流程化操作,一个功能完成后才能进行下一个功能。

(2)功能的完成顺序固定。

(3)功能通常都是由自己完成。

例如:IO操作,一个IO操作完成后,才能进行下一个IO操作,(这就是同步IO)IO的完成过程是由进程自身完成。

优点:操作流程简单

缺点:效率相较较低

2.异步

(1)是一种非流程化操作,无论一个功能是否已经完成,都可以进行下一个功能。

(2)功能的完成顺序不确定。

(3)功能通常都是由别人完成。

例如:IO操作,不管是否完成,都可以立即发起下一个IO操作,IO的完成过程由系统完成。

优点:对系统资源利用更充分,效率相较更高

缺点:流程较为复杂

3.区别与联系

        同步与异步,都是讨论功能的完成方式,同步表示的是按序由自己完成;异步表示的是非按序由系统完成。

同步:操作流程简单,但效率相较较低。

异步:对系统资源利用更充分,效率相较更高,但流程较为复杂。

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

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

相关文章

高通平台开发系列讲解(充电篇)充电管理芯片PM7250B详解

文章目录 一、PM7250B硬件组成二、充电功能沉淀、分享、成长,让自己和他人都能有所收获!😄 📢充电管理芯片PM7250B,用于控制电池充电相关逻辑。 一、PM7250B硬件组成 PWM = Pulse Width Modulator,脉宽调制。SPMS = Switched Mode Power Supply,开关电源。GPIO = Gen…

接口测试(八)—— 日志收集、全量字段校验、JSON Schema语法

目录 一、日志收集 1、日志简介 2、日志的级别 3、日志代码实现分析 4、日志使用 二、全量字段校验 1、简介和安装 2、JSON Schema⼊⻔ 2.1 入门案例 2.2 校验方式 3、JSON Schema语法 3.1 type关键字 3.2 properties关键字 3.3 required关键字 3.4 const关键字…

ADI Blackfin DSP处理器-BF533的开发详解61:DSP控制ADXL345三轴加速度传感器-LCD(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 MEMS三轴加速度传感器 我做了一个三轴加速度传感器的子卡,插在这个板子上,然后写了一些有意思的应用程序。 代码实现功能…

[C++]类和对象【中】

🥁作者: 华丞臧 📕​​​​专栏:【C】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉LeetCode 文章目录类的六个…

推荐一个.Net分布式微服务开发框架

在给大家介绍之前,我们一起来看看分布式架构的使用场景与好处。 针对一些互联网系统,大数据、高并发和快速响应,都是系统必须满足的,而单机系统的架构是无法满足这样的需求的,这时候我们就需要用到分布式的架构。 分…

ADI Blackfin DSP处理器-BF533的开发详解60:DSP控制ADXL345三轴加速度传感器-电子水平仪(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 MEMS三轴加速度传感器 我做了一个三轴加速度传感器的子卡,插在这个板子上,然后写了一些有意思的应用程序。 代码实现功能…

SpringBoot集成JWT实现Token登录验证

1JWT 1.1 JWT是什么? JSON Web令牌(JWT)是一种开放的标准(RFC 7519),它定义了一种紧凑而独立的方式在各方之间安全地传输信息为JSON对象。该信息可以被验证和信任,因为它是数字签名的。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公开…

全国A级景区数据(12000条)

中华人民共和国旅游景区依据质量等级划分景区级别,共分为五级。其中5A级为中国旅游景区最高等级,代表着中国世界级精品的旅游风景区。 而随着国家旅游管理部门对于A级景区实行“有进有出”的动态管理以来,A级景区的调整越来越常态化,其中不乏4A、5A级景区的调整,这也为A级…

使用 NuGet 快速创建 OpenGL 项目

C 目前还没有一个标准的 C 依赖包管理器,传统上都是手动去下载源码编译(经典的例如 make),或者直接下载预编译好的库文件(例如没有开源的)和头文件。之后在项目里配置对应的头文件路径和库路径。这个过程非…

[附源码]Nodejs计算机毕业设计基于响应式交友网站Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

蚁巢相遇问题

一 问题描述 有 N 个蚁巢,编号为 1~N 。第 i 个蚁巢的位置是(xi , yi),没有两个蚁巢在同一位置。所有蚂蚁都遵守一些规律: ① 当一只蚂蚁在蚁巣 p 时,它总是移动到离 p 最近的另一个蚁巣,若有多个蚁巣与 …

计算机毕设Python+Vue心理健康网站(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[leetcode 739] 每日温度

题目链接:https://leetcode.cn/problems/daily-temperatures/ 第一个想法是简单两个 for 循环,但是可能会超时(其实用C不会超时)。 因为最近在做栈的题目,所以想到了最小栈(原来叫作最小栈啊~)…

Rust 从入门到放弃,再入门到贡献 nacos-sdk-rust

Rust 从入门到放弃,再入门到贡献 nacos-sdk-rust Rust 上手难度大?我想是的。从文章标题便可知一二,小编水平有限经历了多次入门,得来的经验之谈。本文不涉及详细的技术剖析,仅表达入门的心路历程,供客官参…

Centos7配置nfs

NFS NFS 就是 Network FileSystem ,此系统可以让不同操作系统、不同主机通过网络彼此分享文件,可以将其视为一个文件服务器。使用NFS可以将远程NFS服务器的分享目录挂载到本地主机上,本地主机访问共享目录就是访问远程的NFS服务器。本地主机被称为客户端…

Nacos 简介与 本地调试环境搭建

目录 1、简介 2、Nacos架构 3、本地调试环境搭建 3.1 源码下载 3.3 单机启动 Nacos 3.4 集群方式启动:基于文件方式 4、Nacos源码模块介绍 5. 约定说明 1、简介 Nacos是Dynamic Naming and Configuration Service的首字母简称 Nacos由阿里巴巴开源&#x…

PyTorch入门

开发环境 ANACONDA 官网:Anaconda | The World’s Most Popular Data Science Platform cmd窗口验证安装成功 CUDA 官网:CUDA Toolkit Archive | NVIDIA Developer 选择匹配pytorch的版本下载安装 命令窗口验证安装成功 PyTorch 官网:…

【JavaSE】泛型

目录 一、泛型概念 二、泛型的语法 1、语法 2、实例化 4、泛型如何编译 5、泛型的上界 6、泛型方法 三、通配符 1、使用场景 2、使用 3、通配符的上下界 一、泛型概念 泛型就是适用于许多许多类型,是在jdk1.5引入的 二、泛型的语法 1、语法 class 类名&l…

Apache Hudi Table Query Types

目录 Table Types​ Query types​​​​​​​ Copy On Write Table Merge On Read ​​​​​​​Table & Query Types | Apache Hudi Hudi表类型定义了如何在DFS上对数据进行索引和布局,以及如何在这样的组织之上实现上述原语和时间线活动&#…

区块链入门的几个基本问题

目录前言比特币区块链区块链大揭秘抛砖引玉故事一故事二总结引人入胜侃侃而谈去中心化开放性不可篡改性相关技术共识机制共识机制的两大核心达成共识的主要过程(产生新区块的过程)工作量如何理解?Hash计算Bits和目标Hash值Merkle Root双花问题…