computer io模型 第一篇

本博文后续将介绍五种IO模型,并介绍linux,window提供的多路复用机制,Java的BIO,NIO,AIO的底层机制(同步阻塞,非阻塞,多路复用,异步IO)

同步,异步,阻塞,非阻塞概念

同步和异步:描述的是用户线程与内核的交互方式(消息通信机制)  

阻塞和非阻塞:描述的是程度等等结果时的状态(调用者的状态)

同步:用户线程发起IO需要等待(调用者主动等待这个调用的结果)

异步:用户线程发起IO请求后仍然继续执行,当内核操作完成后会通知用户线程,或者调用用户线程注册的回调函数

阻塞:在调用结果返回之前,调用者的执行线程会挂起,线程不能做其它事情,只有等待结果返回才能往下执行

非阻塞:IO操作被调用后立即返回给调用者一个状态值,无需等待IO操作彻底完成

同步和异步的实际差别

  访问数据的方式,同步需要当前线程读写数据,在读写数据的过程中还是会阻塞,异步只需要IO操作完成的通知,当前线程不主动读写数据,由操作系统内核完成数据的读写(后续在介绍各种的模式的时候,会发现在第二个阶段,同步依然需要线程发起,内核才进行数据的拷贝)

模式

内存空间分用户空间和内核空间,用户进程无法直接操作底层硬件,只能将请求提交给CPU,由CPU去执行

进程(线程)将请求提交给CPU,等待CPU返回数据(两段式的过程)

  1 等待数据准备:内核从IO设备将数据拷贝至内存空间的Buffer中

  2 内核将数据从内部的Buffer中拷贝至进程空间

CPU在内部IO时,会为每一个IO设备维护一个Buffer,等待数据输入到Buffer,从Buffer复制到进程内存空间,都需要时间,根据等待模式分为:

  blocking IO     阻塞式IO     两段都阻塞

  nonblocking IO   非阻塞式IO   第一段不阻塞,第二段阻塞 (不断轮询,去查看内核是否准备好,准备好后就接着处理)

  IO multiplexing  IO多路复用    两段都阻塞(区别于第一种,一个线程管理多个连接)

  signal driver IO  信号驱动IO    第一段不阻塞,第二段阻塞 (区别于第二种 不进行轮询,内核准备好后通过信号通知用户进程,去发起系统调用)

  asynchrounus IO  异步IO      两段都不阻塞

 

猜你喜欢

转载自www.cnblogs.com/hpzhu/p/10598342.html
今日推荐