读和写远没有你想的那么对称
来源:fgiesen.wordpress.com — 2015-10-25
📋 概述
ryg 从 POSIX 的 read/write 出发,解释这对看似镜像的系统调用为什么在行为上并不对称。存储是块设备,只能整块读写,字节对齐的随机请求必须先由缓冲区缓存翻译成块对齐操作,非对齐写还要先读出块内未被覆盖的部分。用户态又加了一层缓冲,用来摊薄系统调用开销。真正的分野在错误处理上:读可以短读、可以看起来“成功但不完整”,写的错误却常常推迟到刷盘才暴露。
🔑 核心要点
- 块设备只接受整块读写,缓冲区负责把任意偏移的请求翻译成块操作。
- 短读不是异常,而是读操作的正常语义,循环读取必须处理它。
- 写的错误具有延迟性:调用返回成功不代表数据已经落盘。
- 不对称的根源是缓冲分层,而不是 API 设计者偷懒。
💡 金句
Which definitely sounds nice and symmetric—but there’s some important behavioral asymmetries between them, especially when errors are in the mix.
👍 0
👎 0
← 返回 Hacker News 首页