IO本质与效率提升

1. I/O本质:两个阶段

阶段一:等待数据就绪(进程阻塞)
阶段二:数据拷贝(内核缓冲区 → 用户缓冲区)

I/O耗时 = 等待时间 + 拷贝时间

2.五种I/O模型对比

模型 阻塞情况 适用场景
阻塞I/O 两个阶段都阻塞 简单应用
非阻塞I/O 不阻塞,需轮询 异步框架基础
I/O复用 select/poll/epoll 高并发服务器
信号驱动 SIGIO通知 特定场景
异步I/O 完全不阻塞 io_uring

3.七大优化方法

方法 原理 提升效果
增大缓冲区 减少系统调用次数 2-10x
mmap内存映射 绕过read/write,直接访问 3-5x
sendfile零拷贝 内核内部文件→socket传输 5-20x
epoll I/O复用 单进程监控多连接 10-100x
调整文件系统参数 预读/writeback优化 2-5x
异步I/O API libaio/io_uring 5-10x
挂载选项优化 noatime/directio 1.5-3x

4.核心优化层次

应用层:算法+数据结构优化       10-100x
库层:缓冲区+mmap+sendfile      3-20x
系统层:epoll+sysctl            10-100x
内核层:页缓存+零拷贝           5-20x
硬件层:SSD/RAMDISK            10-1000x

5.实战建议

小规模(<100连接)    → 阻塞I/O + 合理缓冲区
中等规模(100-1000)  → epoll LT模式
大规模(>1000连接)   → epoll ET模式 + 非阻塞 + sendfile

关键:I/O优化的核心是减少系统调用次数减少数据拷贝次数,选择合适的方法取决于具体场景(文件大小、并发量、数据类型)。