四种响应模型
- 同步:调用后,死等,等到结果为止
- 异步:调用立即返回,等到有结果通知
- 阻塞:数据没有处理完成前不返回
- 非阻塞:调用立即返回等到有结果通知我
五种I/O模型
- 阻塞I/O (Blocking I/O)
当进程进行系统调用时,内核开始了IO的第一个阶段准备数据,准备完成交给内核缓冲最后拷贝到用户进程的内存中,然后才解锁进程,这个等待过程称为阻塞。
- 非阻塞I/O (Non-Blocking I/O)
进程在第二阶段被阻塞,调用的时候没有阻塞,第二阶段开始不断轮训CPU询问数据是否准备完毕,所以比较消耗CPU资源的模型
- I/O复用(I/O Multiplexing)
IO执行的两个阶段进程都是阻塞的,在这次完整的过程中,进程发起了两次系统调用。和阻塞IO不同的是第一阶段可以等待多个调用结果
- 信号驱动的I/O (Signal Driven I/O)
只有在IO执行的第二阶段阻塞了进程,该模型在IO执行的第一阶段,当数据完成之后,会主动通知进程数据已经准备好,对进程做一个回调,通知分为两种,一位水平触发,及时进程不响应会一直发送通知,二为边缘触发,即只通知一次
- 异步I/O (Asynchrnous I/O)
当进程发起系统调用后,立刻就可以开始做其它事情,然后知道IO执行的两个阶段都完成之后,内核会给集成发送通知,告之进程已经完成处理了。