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

简介: 【2月更文挑战第4天】

一、阻塞IO

       为了完成IO发起IO调用,若IO事件没有就绪,则一直等待,直到IO就绪,开始数据拷贝。

优点:流程最为简单,使用复杂度非常低。

缺点:IO效率较低,对资料利用不足。

image.png

二、非阻塞IO

        为了完成IO发起IO调用,若IO事件没有就绪,则调用直接返回(返回后,先进行一些其他任务,之后再重新发起IO调用)。

优点:不等待IO就绪,而是直接立即返回,可以继续对其他描述符进行IO操作,充分利用资源,效率相较于阻塞IO有所提高。

缺点:IO不够实时,且通常需要循环进行操作,增加了一定的复杂度。

image.png

三、信号驱动IO

       先定义IO就绪信号处理方式,当收到信号通知,则表示IO就绪,随后发起IO调用,完成IO操作。

优点:效率更高,更加实时,更加充分利用资源(在没有收到IO信号之前,可以进行其他任务处理,收到信号后,再进行IO请求)。

缺点:IO复杂度更高,需要涉及到信号操作。

image.png

四、异步IO

       发起IO调用,让系统进行IO就绪等待以及完成数据拷贝,完成后再通过信号通知进程。

注意:

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

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

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

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

image.png

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

1.阻塞

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

2.非阻塞

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

3.区别与联系

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

六、同步VS异步(概念)

1.同步

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

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

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

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

优点:操作流程简单

缺点:效率相较较低

2.异步

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

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

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

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

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

缺点:流程较为复杂

3.区别与联系

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

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

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

相关文章
|
8月前
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
324 34
|
Linux 开发者
深入理解Linux I/O模型:同步、异步、阻塞与非阻塞
【8月更文挑战第1天】在探索操作系统的奥秘中,I/O模型作为影响性能的关键因素之一,常常让开发者们感到困惑。本文将通过浅显易懂的语言和实际代码示例,揭示Linux下同步与异步、阻塞与非阻塞的概念及其区别,并指导如何在实际应用中选择合适的I/O模型以优化程序性能。
385 1
|
Linux 数据处理 C语言
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
184 0
|
Linux 编译器 C语言
【Linux】基础IO----理解缓冲区
【Linux】基础IO----理解缓冲区
185 0
【Linux】基础IO----理解缓冲区
|
缓存 网络协议 算法
【Linux系统编程】深入剖析:四大IO模型机制与应用(阻塞、非阻塞、多路复用、信号驱动IO 全解读)
在Linux环境下,主要存在四种IO模型,它们分别是阻塞IO(Blocking IO)、非阻塞IO(Non-blocking IO)、IO多路复用(I/O Multiplexing)和异步IO(Asynchronous IO)。下面我将逐一介绍这些模型的定义:
620 2
|
Linux C语言 C++
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(上)
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(上)
135 0
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
6天前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
76 1
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
621 12