理解网络IO模型

网络IO模型

什么是IO

即Input/Output,我们通过电脑访问硬盘资源本身的操作就是一种IO操作。

什么是网络IO

网络上的数据是通过协议流动的,两端在通信时是通过各自的套接字Scoket进行操作。所谓的网络IO就是对Socket套接字进行读取操作

深入理解Socket套接字原理_Princesk的博客-CSDN博客

网络上使用tcp协议通讯时两端都会先将数据包放到socket划分缓存区,网络IO操作的就是这个缓存区或者叫缓冲区。

网络IO操作Socket的操作流程

  1. 等待网络上通过协议传输的数据分组到达,然后放到某个缓冲区

  2. 按照进程要求将目标数据移交到对应进程的缓冲区内等待进程去使用

IO的常见模型

  • 阻塞IO,bokingio
  • 非阻塞IO,non-boking io
  • 多路复用IO,multiplexing io
  • 信号驱动式IO,signal-driven io
  • 异步IO,asynchronous io

阻塞IO

应用进程被阻塞,直到数据复制到应用进程缓冲区才返回。

非阻塞IO

应用进程执行系统调用后,内核返回一个错误码。然后应用程序继续执行,但是需要不断执行系统调用获知IO是否完成,轮询的一种。

缺点:cpu利用率低

多路复用IO

由于阻塞式IO通过轮询得到的只是一个IO任务是否完成,而可能有多个任务在同时进行,因此就想到了能否轮询多个IO任务的状态,只要有任何一个任务完成,就去处理它。这就是所谓的IO多路复用

信号驱动式IO

应用进程使用 sigaction 系统调用,内核立即返回,应用进程可以继续执行,也就是说等待数据阶段应用进程是非阻塞的。内核在数据到达时向应用进程发送 SIGIO 信号,应用进程收到之后在信号处理程序中调用 recvfrom 将数据从内核复制到应用进程中。

异步IO

应用进程执行aio_read系统调用会立即返回,应用进程可以继续执行且不会阻塞,内核在所有操作完成后向该应用进程发送信号

你可能感兴趣的:(web应用测试学习,学习)