码迷,mamicode.com
首页 > 其他好文 > 详细

理解同步,异步,阻塞,非阻塞,多路复用,事件驱动IO

时间:2018-07-15 11:16:04      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:任务   取数据   lin   空间   用户   情况   事件   方式   io多路复用   

以下是IO的一个基本过程

 技术分享图片

先理解一下用户空间和内核空间,系统为了保护内核数据,会将寻址空间分为用户空间和内核空间,32位机器为例,高1G字节作为内核空间,低3G字节作为用户空间。当用户程序读取数据的时候,会经历两个过程:磁盘到内核空间(这块消耗性能,下面简称内核数据准备),内核空间拷贝到用户空间(下面简称用户空间拷贝)。

 

基于这个前提,同步异步IO,阻塞非阻塞IO

这几个概念其实非常类似的,区分的关键点在于被调用者的返回方式。

当我们进行IO操作的时候,如果被调用者将任务全部执行完返回,称为同步/阻塞 IO

 技术分享图片

如果被调用者,不管没有操作成功,直接返回一个结果码,但是不再主动通知后续结果,称为非阻塞IO;这种情况下需要重复调用查询状态。

 技术分享图片

如果被调用者,不管有没有操作成功,直接返回个结果码,等到全部操作完成之后再发一个信号通知调用者,称为异步IO

技术分享图片

 

举个例子:

家里有个专门帮忙做饭的阿姨,有一天我想喝水了,我让阿姨帮忙烧一壶水。

我看着她去烧水,灌水,给我倒水,期间没有做其他任何事情,这就是同步。

我想着也不用一直等,可以先看会儿电视,我就隔一会儿来看一次,隔一会儿来看一次,这叫非阻塞。

再想想,这也烦,我索性跟阿姨说,好了叫我一声,然后就去看电视去了,这叫异步。

 

而IO多路复用,信号驱动IO则是基于前面四个模型的衍生。

IO多路复用是基于阻塞IO的衍生,主要是为了提高内核空间数据准备这一块的功能复用,即阻塞的同时监听多个端口,有一个端口有数据就进行处理,提高性能。

技术分享图片

 

信号驱动IO则是在内核空间数据准备这一块采用异步,在用户空间拷贝这一块采用同步。

 技术分享图片

 

理解同步,异步,阻塞,非阻塞,多路复用,事件驱动IO

标签:任务   取数据   lin   空间   用户   情况   事件   方式   io多路复用   

原文地址:https://www.cnblogs.com/darrenqiao/p/9311618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!