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上