5种IO模型

5种IO模型

5种IO模型分别为阻塞IO、非阻塞IO、IO多路复用、异步通信IO和信号驱动IO。

学懂IO模型,就需要先知道以下知识点

什么是IO

所谓IO,就是我们经常提到的input/output。通常情况下,我们的运行程序存在内存中,当程序运行时,CPU就会从内存中读数据,这个时候就涉及到数据交换,就需要IO接口。
IO操作是相对于内存来说的,从内存中读数据,就是output,将数据存入内存,就是input。Linux中,进程无法直接操作IO设备,必须通过系统调用,请求kernel来协助完成IO操作。内核会为每一个IO设备维护一个缓冲区。
对于一个输入操作来说,进程IO系统调用后,内核首先会看缓冲区中有无数据,如果有数据,就将数据复制到内存中,如果没有数据,就需要等待设备发送数据过来后再存入内存,所以IO设备一般速度较慢,需要等待。

IO的分类

通常用户进程中的一个完整IO分为两个阶段:用户进程空间<–>内核空间、内核空间<–>设备空间(磁盘、网络等)。IO分为内存IO、网络IO和磁盘IO三种,但是通常我们所说的IO是后两种IO。
IO按照设备来分,分为两种:一种是网络IO,另一种是磁盘IO。网络IO,举个例子,当网络中有数据传来时,先将数据传到网卡,然后将数据读取到内核缓冲区,最后将数据复制到进程空间。

同步与异步

由于CPU和内存的速度远远高于外设的速度,所以在IO编程中,就存在速度严重不匹配的问题。
同步请求:A调用B,B的处理是同步的,在处理完之前他不会通知A,只有处理完之后才会明确的通知A。
异步请求:A调用B,B的处理是异步的,B在接到请求后先告诉A我已经接到请求了,然后异步去处理,处理完之后通过回调等方式再通知A。
同步和异步最大的区别就是被调用方的执行方式和返回时机。同步指的是被调用方做完事情之后再返回,异步指的是被调用方先返回,然后再做事情,做完之后再想办法通知调用方。

阻塞与非阻塞

阻塞请求:A调用B,A一直等着B的返回,别的事情什么也不干。
非阻塞请求:A调用B,A不用一直等着B的返回,先去忙别的事情了。
阻塞和非阻塞最大的区别就是在被调用方返回结果之前的这段时间内,调用方是否一直等待。阻塞指的是调用方一直等待别的事情什么都不做。非阻塞指的是调用方先去忙别的事情

5中IO模型详解

阻塞IO模型

进程发起IO系统调用后没进程被阻塞,转到内核空间上去处理,整个IO处理完毕后返回进程,操作成功则进程获取到数据。
在这里插入图片描述

非阻塞IO

和上面的阻塞IO模型相比,非阻塞IO模型在内核数据没准备好,需要进程阻塞的时候,就返回一个错误,以使得进程不被阻塞。
进程发起IO系统调用后,如果内核缓冲区没有数据,需要到IO设备中读取,进程返回一个错误而不会被阻塞。
进程发起IO系统调用后,如果内核缓冲区有数据,内核就会把数据返回进程。
这种工作方式下需要不断轮询查看状态
在这里插入图片描述

IO多路复用

多个进程的IO可以注册到一个复用器(select)上,然后用一个进程调用该select,,select会监听所有注册进来的IO。
如果select监听的IO在内核缓冲区都没有可读数据,select调用进程会被阻塞;而当任一IO在内核缓冲区中有可读数据时,select调用就会返回;而后select调用进程可以自己或通知另外的进程(注册进程)来再次发起读取IO,读取内核中准备好的数据。

Linux中IO复用的实现方式主要有Select,Poll和Epoll:
Select:注册IO、阻塞扫描,监听的IO最大连接数不能多于FD_ SIZE(1024)。
Poll:原理和Select相似,没有数量限制,但IO数量大,扫描线性性能下降。
Epoll :事件驱动不阻塞,mmap实现内核与用户空间的消息传递,数量很大,Linux2.6后内核支持。
在这里插入图片描述

信号驱动IO

当一个进程发起IO操作时,会向内核注册一个信号处理函数,饭后进程返回不阻塞,当内核数据就绪时会发送一个信号给进程,进程便在信号处理函数中调用IO读取数据。
在这里插入图片描述

异步IO

当进程发起一个IO操作,进程返回不阻塞,但也能返回结果。当内核把整个数据处理完成后,会通知进程结果,如果IO操作成功则进程直接获取数据。
在这里插入图片描述
对于异步的IO请求,其最大的好处是:慢速的IO请求相对于应用程序而言是异步执行,这样可以极大提高应用程序的处理吞吐量。
发起IO请求的应用程序需要关心的是IO执行完成的结果,而不必忙等IO请求执行的过程。它只需要提交一个IO操作,当内核执行这个IO操作时,线程可以去运行其他逻辑,也不需要定期去查看IO是否完成,当内核完成这个IO操作后会以某种方式通知应用。
此时应用的运行和IO执行变成了并行的关系,可以批量的进行IO操作,让设备的能力得到最大发挥

5中IO模型的区别
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈吓

您的打赏是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值