光速理解阻塞非阻塞和同步异步

90 阅读1分钟

网络I/O可以分成两个阶段,数据准备阶段和数据拷贝阶段。

  1. 数据准备阶段是等待数据返回,返回的数据会保存在内核缓冲区;
  2. 数据拷贝阶段是执行实际的I/O操作,将数据从内核缓冲区拷贝到用户进程缓冲区。

image.png

阻塞和非阻塞

阻塞和非阻塞是针对数据准备阶段时调用者调用系统内核,此时未获取到数据,如果选择等待则是阻塞;如果直接返回是非阻塞。

同步和异步

同步和异步是针对数据拷贝阶段,如果数据是由调用者从内核缓冲区拷贝到用户进程缓冲区,则是同步;如果数据是由内核线程从内核缓冲区拷贝到用户进程缓冲区后通知调用者,则是异步。

总结

阻塞和非阻塞关注的是等待任务完成时调用者的状态(第一阶段 调用者等待 or 立即返回);同步和异步关注的是任务完成消息通知的机制(第二阶段 调用者执行I/O or 内核执行I/O后通知调用者)。