UNIX的五种IO模型

2023年 9月 28日 52.7k 0

Linux支持五种IO模型,分别是:

  • 阻塞式I/O (Blocking I/O)
  • 非阻塞式I/O (Non-blocking I/O)
  • I/O复用 (I/O Multiplexing)
  • 信号驱动式I/O (Signal-driven I/O)
  • 异步I/O (Asynchronous I/O)
  • 一. 阻塞式I/O

    应用程序执行一个I/O操作后,必须等待I/O操作的完成

    具体流程如下:

  • 调用I/O操作
  • 等待数据准备就绪
  • 数据拷贝到应用程序
  • I/O操作完成
  • image.png

    二.非阻塞式I/O

    应用程序执行一个I/O操作后立即返回,不等待数据准备

    具体流程如下:

  • 调用I/O操作
  • 如果数据准备好了,立即拷贝;如果没有准备好,就返回一个错误代码
  • 应用程序需要不断地重试I/O操作,直到数据准备好
  • image.png

    三.I/O复用

    使用select或poll等系统调用来监视多个文件描述符,看其是否准备就绪

    具体流程如下:

  • 调用select或poll等待数据准备
  • 一旦数据准备就绪,操作系统将通知应用程序
  • 应用程序再执行I/O操作读取数据
  • image.png

    四.信号驱动式I/O

    具体流程如下:

  • 应用程序请求接收一个信号来告知数据何时准备就绪。
  • 当数据准备好时,操作系统发送一个信号。
  • 在信号处理器中,应用程序启动I/O操作来读取数据。
  • image.png

    五.异步I/O

    应用程序请求I/O操作并立即返回,操作系统完成所有的工作(包括等待和数据拷贝),并在整个I/O操作完成后通知应用程序

    具体流程如下:

  • 应用程序发起一个异步I/O请求。
  • 操作系统等待数据准备,然后拷贝数据。
  • 操作系统通知应用程序I/O已完成。
  • image.png

    ps:全是自己画的图,所以希望大家点点赞!

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论