IO 通讯模型

IO操作并非是一个原子过程,而是按照一定的步骤执行,我们以IO读操作为例,大概分为两个步骤:

(1)数据准备阶段:数据发送到接收端的操作系统内核中

(2)数据接收阶段:数据从操作系统内核拷贝到用户存储空间中

现在的一些IO模型概念基本都与这两个操作有关,下面我一一介绍:

1,同步阻塞IO

用户在发起一个读数据的请求,然后调用这个请求的线程进入阻塞状态,直到(1),(2)步骤全部做完线程才返回继续执行下面的操作

2,同步非阻塞IO

用户发起一个读IO操作的请求,然后返回处理其他事情,然后不断地检查,直到(1)步骤处理完毕,线程进入阻塞状态处理(2)步骤,处理完毕之后线程返回处理其他事情

3,IO 多路复用技术(同步阻塞IO的一种)

用户发起一个读IO请求,随即将请求注册到selector上面去,随后进入阻塞状态,当完成步骤(1)之后,由多路复用器通识请求调用者,然后以阻塞的方式开始执行步骤(2),直到执行完毕返回,线程继续执行下面的操作

4,信号驱动IO

用户发起读IO请求之后就去做别的事情了,当操作系统执行完(1)之后以消息或者回调的方式通知调用线程,以阻塞的方式执行步骤(2),直到完成返回继续往下执行。

5,异步非阻塞IO

用户发起读IO请求之后,就去做别的事情了,操作系统做完(1),(2)之后再以消息或者回调的方式通知IO调用者。

比较图:

猜你喜欢

转载自my.oschina.net/u/1169535/blog/1589654
今日推荐