I/O复用模型

本文详细介绍了计算机中的五种I/O模型:阻塞I/O、非阻塞I/O、I/O复用、信号驱动I/O及异步I/O,并对各种模型的工作原理进行了深入浅出的解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I/O复用模型

     首先为什么需要I/O模型呢,因为进程是无法直接操作I/O设备的。其必须通过系统调用请求kernel来协助完成I/O动作。
   而内核会为每个I/O设维护一个buffer。
   对于输入而言,等待数据输入到buffer需要时间的,而从buffer复制数据给进程也需要时间的。
   根据等待的模式不同,I/O分为五类。

一.Blocking I/O(阻塞IO)
二.Nonblocking I/O(非阻塞IO)
三.IO mutiplexing(select和poll) (IO复用)  
四.single driven I/O (SIGIO)(信号驱动的IO)
五.asynchronous I/O (异步IO)

阻塞I/O



阻塞是什么意思呢。一个进程请求了数据文件,这时就向内核提交IO申请,内核去处理这个IO请求,将磁盘上的数据拷贝到buffer中。数据拷贝结束后,内核再从buffer中将数据拷出来给进程,在这个过程中,进程只能做等待不能去做其他的事。直到进程将数据返回。


非阻塞IO




非阻塞IO和阻塞IO有个区别,那就是,阻塞IO在等待数据从磁盘拷入到内核的Buffer中时,他不停的询问数据是否准备好,是否准备好,是否准备好,当数据从磁盘到内核中后就不询问了,当然,这时还需要buffer中的数据再给进程才可以。

IO复用



     IO复用,这个进程请求数据后,在内核从IO上取数据时,这个过程是阻塞的,当数据准备好时,内核返回一个可读条件,进程再次发起一个系统调用,当再次发起系统调用时,又阻塞了。整个过程分为了两段,每段是独立执行的。就是数据从磁盘拷到buffer里,但是我不系统调用,我也不需要阻塞。


信号驱动IO

    

   当进程想要数据了,发起系统调用,调用后不用阻塞,而是由内核返回一个信号处理程序,进程可以再去做其他的事情。内核处理好了,会发一个信号给进程,这时进程再系统调用,然后阻塞。由图可得这是个异步的过程。前半部分不用阻塞,而后半部分需要阻塞。


水平触发:通知不到,不停通知
边沿触发:通知一遍,就不通知了

异步IO



    两个过程都不阻塞。程序可以随意运行。

最后来一个总结。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值