IO操做并不是是一个原子过程,而是按照必定的步骤执行,咱们以IO读操做为例,大概分为两个步骤:异步
(1)数据准备阶段:数据发送到接收端的操做系统内核中操作系统
(2)数据接收阶段:数据从操做系统内核拷贝到用户存储空间中线程
如今的一些IO模型概念基本都与这两个操做有关,下面我一一介绍:同步
1,同步阻塞IOselect
用户在发起一个读数据的请求,而后调用这个请求的线程进入阻塞状态,直到(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调用者。
比较图: