# 二、非阻塞 IO

# 1. 概念

应用进程与内核交互,目的未达到之前,不再一味的等着,而是直接返回。然后通过轮询的方式,不停的去问内核数据准备有没有准备好。如果某一次轮询发现数据已经准备好了,那就把数据拷贝到用户空间中。

图片

应用进程通过 recvfrom 调用不停的去和内核交互,直到内核准备好数据。如果没有准备好,内核会返回error,应用进程在得到error后,过一段时间再发送recvfrom请求。在两次发送请求的时间段,进程可以先做别的事情。

# 2. 优点

  • 能够在等待任务完成的时间里干其他活了(包括提交其他任务,也就是 “后台” 可以有多个任务在同时执行),并发性强了。

# 3. 缺点

  • 任务完成的响应延迟增大了,因为每过一段时间才去轮询一次 read 操作,而任务可能在两次轮询之间的任意时间完成。这会导致整体数据吞吐量的降低。

# 4. 适用场景

  1. 适用于连接数目较小且固定架构,这种方式对服务器资源要求较高,并发局限于应用中。
  2. 适用并发量较小、且不需要及时响应的网络应用开发。

# 5. 方案

  1. socket(设置为 NONBLOCK)
上次更新: 9/17/2021, 12:06:46 PM