IO模型简介

发布于:2023-10-25 ⋅ 阅读:(128) ⋅ 点赞:(0)

IO模型简介

1. IO

I/O Device <---> Kernel Space <--->  User Space 

IO(Input/Output,输入/输出),数据的读取(输入)或写入(输出)操作。

IO主要包括:

  • 内存IO
  • 网络IO
  • 磁盘IO

用户进程的IO分为两个阶段:

  • 数据准备阶段:设备空间 <—> 内核空间
  • 数据复制阶段:内核空间 <—> 用户空间

2. 五种IO模型

IO模型 英文 缩写 备注
阻塞IO Blocking IO BIO 同步阻塞IO
非阻塞IO Non-Blocking IO NIO 同步非阻塞IO
IO多路复用 IO Mutiplexing 事件驱动模型;异步阻塞IO
信号驱动IO Signal Driven IO SIGIO
异步IO Asynchronous IO AIO 异步非阻塞IO

2.1 阻塞IO

进程发起IO系统调用后,进程被阻塞,转到内核空间处理,整个IO处理完毕后返回进程。

2.2 非阻塞IO

进程发起IO系统调用后,如果内核缓冲区没有数据,需要到IO设备中读取,进程返回一个错误而不会被阻塞;进程发起IO系统调用后,如果内核缓冲区有数据,内核就会把数据返回进程。

2.3 IO多路复用

IO多路复用就是一个 进程/线程同时处理多个IO请求 。该模型解决了非阻塞IO中的频繁轮询 CPU 的问题。

原理:进程把多个文件描述符注册到select/poll/epoll函数,由内核监视,函数阻塞。当有文件描述符就绪或超时的时候,函数返回,然后该进程进行相应的读/写操作。

典型应用:linux的select、poll、epoll

2.4 信号驱动IO

当进程发起一个IO操作,会向内核注册一个信号处理函数,然后进程返回不阻塞;当内核数据就绪时会发送一个信号给进程,进程便在信号处理函数中调用IO读取数据。

2.5 异步IO

当进程发起一个IO操作,进程返回不阻塞,内核把整个IO处理完后,会通知进程结果。

3. 主流操作系统的IO事件驱动模型

Windows: IOCP

Linux: epoll (poll select)

Mac(BSD): kqueue

SunOS: event ports

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到