深度剖析muduo网络库1.2---五种IO模型--阻塞式IO、非阻塞式IO、多路复用IO、信号驱动IO、异步IO

有关于五种IO模型,在另一篇文章里我已经做了详细的介绍谈谈常见的IO模型,这里在结合最近学习的内容把相关的图片贴一下!

五种IO模型

 Linux系统下,IO主要分为五种:

  1. 阻塞式IO(blocking IO)—进程或线程等待某个条件,若条件不满足就一直等下去。条件满足,则进行下一步操作。
    .在这里插入图片描述

  2. 非阻塞式IO(nonblocking IO)—应用进程与内核交互,目的未达到之前,直接返回。然后通过轮询的方式,不停的去问内核数据准备有没有准备好。如果某一次轮询发现数据已经准备好了,那就把数据拷贝到用户空间中。
    在这里插入图片描述

  3. 多路复用IO(IO multiplexing) —多个进程的IO注册到同一个管道(select函数)上,这个管道会统一和内核进行交互。当管道中的某一个请求需要的数据准备好之后,进程再把对应的数据拷贝到用户空间中。
    在这里插入图片描述

  4. 信号驱动IO(signal driven IO) —应用进程在读取文件时通知内核,如果某个 socket 的某个事件发生时,请向我发一个信号。在收到信号后,信号对应的处理函数会进行后续处理。
    在这里插入图片描述

  5. 异步IO( asynchronous IO) —用户进程发起aio_read操作之后,给内核传递描述符、缓冲区指针、缓冲区大小等,告诉内核当整个操作完成时,如何通知进程,然后就立刻去做其他事情了。当内核收到aio_read后,会立刻返回,然后内核开始等待数据准备,数据准备好以后,直接把数据拷贝到用户控件,然后再通知进程本次IO已经完成。
    在这里插入图片描述
    说明:这里的图片,是学习的课程里面的截图,没有自己画,以后有时间会自己画一版。

再来总体看一下,五种IO的过程

 通过下图,可以清晰的看出五种IO运行时的区别
在这里插入图片描述
从图中可以看出,从效率来讲,这五种IO的由低到高的顺序是这样的:阻塞IO>非阻塞IO>多路转接IO>信号驱动IO>异步IO。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值