四种响应模型

  1. 同步:调用后,死等,等到结果为止
  2. 异步:调用立即返回,等到有结果通知
  3. 阻塞:数据没有处理完成前不返回
  4. 非阻塞:调用立即返回等到有结果通知我

五种I/O模型

  1. 阻塞I/O (Blocking I/O)

阻塞I/O

当进程进行系统调用时,内核开始了IO的第一个阶段准备数据,准备完成交给内核缓冲最后拷贝到用户进程的内存中,然后才解锁进程,这个等待过程称为阻塞。

  1. 非阻塞I/O (Non-Blocking I/O)

非阻塞I/O

进程在第二阶段被阻塞,调用的时候没有阻塞,第二阶段开始不断轮训CPU询问数据是否准备完毕,所以比较消耗CPU资源的模型

  1. I/O复用(I/O Multiplexing)

I/O复用

IO执行的两个阶段进程都是阻塞的,在这次完整的过程中,进程发起了两次系统调用。和阻塞IO不同的是第一阶段可以等待多个调用结果

  1. 信号驱动的I/O (Signal Driven I/O)

信号驱动的I/O

只有在IO执行的第二阶段阻塞了进程,该模型在IO执行的第一阶段,当数据完成之后,会主动通知进程数据已经准备好,对进程做一个回调,通知分为两种,一位水平触发,及时进程不响应会一直发送通知,二为边缘触发,即只通知一次

  1. 异步I/O (Asynchrnous I/O)

异步I/O

当进程发起系统调用后,立刻就可以开始做其它事情,然后知道IO执行的两个阶段都完成之后,内核会给集成发送通知,告之进程已经完成处理了。