该图通过 颜色和小方格大小 相对性地表示了各种系统操作的常规延迟,应该成为每一位进行性能分析/异步/缓存/线程优化的程序员必备工具。
【🔹 级别一:纳科级操作 (1ns ~ 100ns)】
操作类型 | 延迟 | 说明 |
---|---|---|
L1 Cache 访问 | 1ns | 最快的缓存 |
Branch Mispredict | 3ns | 分支预测错误带来的缓慢 |
L2 Cache 访问 | 4ns | 比L1缓慢一点 |
Mutex Lock/Unlock | 17ns | 线程同步常用 |
内幕网发送2KB | 44ns | 本机网络带宽非常快 |
主内存访问 | 100ns | 比缓存慢 100倍 |
【🟩 级别二:微秒级操作 (1μs ~ 999μs)】
操作类型 | 延迟 | 说明 |
内存顺序读取 1MB | 3μs | 较大量的内存读取 |
用Zippy压缩1KB | 2μs | 压缩操作也较慢 |
SSD随机读取 | 16μs | 比内存慢多了 |
SSD 顺序读取 1MB | 49μs | 加速显著 |
同数据中心循环 | 500μs | 同地网络延迟额强 |
磁盘顺序读取 1MB | 825μs | 比 SSD 慢了一个数量级 |
【🔴 级别三:毫秒级操作 (1ms ~ 150ms)】
操作类型 | 延迟 | 说明 |
磁盘寻道 | 2ms | HDD 硬盘最慢环节 |
CA 至荷兰网络来回 | 150ms | 全球网络速度上限 |
【总结心得】
-
如果你在写 性能敏感 代码,懂得这些延迟数字非常重要!
-
相对性比例:
操作 | 延迟 | 比例描述 |
CPU缓存 | 1ns | 基准 |
内存读取 | 100ns | 慢了100倍 |
SSD 读取 | 49μs | 慢了万倍+ |
磁盘 | 825μs~2ms | 慢 10^4倍以上 |
全球网络 | 150ms | 慢 10^6 ~ 10^7倍 |
【应用场景提示】
-
异步/缓存时:
-
为何要先缓存数据?
-
为何不该等磁盘或网络完成后再运行后续运算?
-
-
运行分析:
-
CPU-bound vs I/O-bound
-
GPU 转 CPU 数据需较长时间,考虑 non-blocking / 线程调度
-
-
设计合理的实时性系统