对五种IO模型的总结

对于一个套接字上的输入操作,第一阶段是等待数据从网络中到达,当数据到达时被复制到内核中的某个缓冲区。第二阶段就是把数据从内核缓冲区复制到应用进程缓冲区

第一、二阶段全阻塞:阻塞式IO

IO004.jpg

第一阶段非阻塞,第二阶段阻塞:

  • 非阻塞式IO(轮询模式)
    IO002.jpg

  • 信号驱动IO
    IO003.jpg

完全非阻塞

异步IO
IO001.jpg

多路复用IO: 理解为先进行 select 操作后再进行 IO 操作, 实现用户进程对多个套接字 Select, 只要一个 socket 准备好就可以进行 IO , 两段都是阻塞的, 谁先完成谁服务

IO001.jpg

异步IO: 由内核在数据拷贝完成时, 通知应用程序(而信号驱动是告诉应用程序何时可以开始拷贝数据)。