Part II · 一台机器 · 第 5 章
05
与世界对话:I/O、文件与存储
CPU 和内存只是在机器内部转圈。真正的服务必须收网络、写文件、刷磁盘。I/O 是程序走出自身的门,也是云上尾延迟最常埋伏的地方。
0先把地图摊开
CPU 和内存只是在机器内部转圈。真正的服务必须收网络、写文件、刷磁盘。I/O 是程序走出自身的门,也是云上尾延迟最常埋伏的地方。 本章不会把概念排成术语表,而是沿着一条真实系统路径走:先看它解决什么痛点,再看 OS/云平台怎样实现,最后回到工程取舍。
文件描述符进程访问文件、socket、pipe 的句柄。Unix 把很多东西都统一成 fd。
页缓存内核用内存缓存磁盘数据,读写常先落在这里。
fsync要求系统把脏数据真正推到持久介质上的同步点。
异步 I/O不把线程卡死在等待上,而是在完成时通知。
5.1文件是接口,不只是磁盘上的东西
在 Unix 里,文件描述符可以代表普通文件、网络 socket、pipe、设备。这个统一接口让程序用相似方式读写世界,也让内核成为所有 I/O 的裁判。
5.2写成功不等于已经落盘
调用 write 返回,通常只说明数据进入了内核缓冲。真正写到 SSD 可能稍后发生。数据库为什么小心翼翼地调用 fsync?因为崩溃时,缓冲里的承诺可能还没变成物理事实。
5.3页缓存让磁盘看起来更快
热数据读起来像在内存里,因为它真的在内存里。页缓存是性能恩人,也是理解基准测试的陷阱:第一次读的是磁盘,第二次可能只是读内存。
5.4网络 I/O 也是文件式的
socket 是双向字节流或报文入口。高并发服务器不会给每个连接配一个阻塞线程,而是用 epoll/kqueue/io_uring 等机制等待“哪些 fd 准备好了”。
5.5云存储把本地 I/O 放大成网络协议
对象存储、网络块盘、分布式文件系统都把一次读写跨到远端机器。你以为在写磁盘,实际可能穿过网络、复制到多副本、等待 quorum。
↔云与 OS 的桥
这一章不是孤立知识点。下面这张表把它和前后章节接起来:你会看到,同一个机制在单机、云平台和 AI 基建里会换名字,但问题结构没变。
| 本章机制 | 云上形态 | 为什么重要 |
|---|---|---|
| 文件描述符 | socket、日志、容器 stdout | 云服务的可观测性和网络通信都走类似抽象。 |
| 页缓存 | 数据库 buffer pool、对象存储网关 | 双重缓存可能帮你,也可能污染基准。 |
| fsync | 事务日志、消息队列确认 | 持久化承诺必须落到明确的同步边界。 |
深潜 读完本章后,怎么确认自己真的懂了?›
不要只背定义。你应该能把一个线上现象翻译回机制:慢在哪里、谁在排队、哪个抽象漏了、哪个资源被过度承诺。下面三个检查点可以当成小作业。
本章收束 · 你现在握住了什么
- Unix 用文件描述符统一文件、socket、pipe 和设备。
- write 返回不一定代表持久化,fsync 才是更强承诺。
- 页缓存提升性能,也让测试和故障语义更复杂。
- 云存储把本地 I/O 扩展成跨网络、多副本的协议。
Part II 到这里收束。接下来我们回到云:一台物理机如何正式切成许多台虚拟机?