Skip to content

I/O模型

一个输入操作通常包括两个阶段:

  • 等待数据准备好
  • 从内核向进程复制数据

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

Unix 有五种 I/O 模型:

  • 阻塞式 I/O
    • 等待数据从内核缓冲区复制到应用进程缓冲区
  • 非阻塞式 I/O
    • 应用不断的调用系统函数来获取是否有IO完成
    • 内核缓冲区复制到应用进程缓冲区
  • I/O 复用(select 和 poll)即事件驱动 I/O
    • 内核在数据到达时向应用进程发送 SIGIO 信号,
    • 应用进程收到之后在信号处理程序中调用 recvfrom 将数据从内核复制到应用进程中。
  • 信号驱动式 I/O(SIGIO)
  • 异步 I/O(AIO)

IO复用模型

select

文件描述符有限 1024 个

时间粒度微秒

所有平台都有

poll

java nio

文件描述符不限

支持更多的事件

时间粒度毫秒

epoll

长连接

Linux上