IO模型介绍
- 我们研究的 IO 都是基于网络 IO 的
- Stevens在文章中一共比较了五种IO Model:
- blocking IO
- nonblocking IO
- IO multiplexing
- signal driven IO ---(忽略)
- asynchronous IO 由signal driven IO(信号驱动IO)在实际中并不常用,所以主要介绍其余四种IO Model。
- 当一个read操作发生时,该操作会经历两个阶段:
- 1、等待数据准备 (Waiting for the data to be ready)
- 2、将数据从内核拷贝到进程中(Copying the data from the kernel to the process)
- 同步
- 在同步模式下,一个组件必须等待另一个组件完成某个操作,然后再进行下一个操作。
- 异步
- 在异步模式下,组件之间互不干扰,它们可以独立地执行任务。当一个组件完成任务后,它可以直接通知另一个组件继续执行操作。
- 阻塞
- 在阻塞模式下,一个进程或线程在执行某个操作时,如果该操作没有完成,它将立即停止一切操作,并等待操作完成后再继续进行后续操作。
- 非阻塞
- 在非阻塞模式下,一个进程或线程在执行某个操作时,即使该操作没有完成,也会立即返回执行下一个操作,不会出现停滞等待的情况。 如果下一个操作需要依赖于上一个还未完成的操作,它将定期检查上一个操作是否完成,保证这些未完成的操作不会影响后续任务的执行。
- 常见的网络IO
- accept
- recv
- recvfrom
一、阻塞IO模型
我们之前写的都是阻塞 IO 模型 (协程除外)
[1]TCP/UDP协议模型