数据转载自:Latency Numbers Every Programmer Should Know (2025 Update),其提供了柱状图,建议访问感受下各项操作的延时差距。

1. 核心延迟数据表

操作项目 (Operation)延迟时间 (Latency)原文
L1 缓存读取1 nsL1 Cache Reference
分支预测错误5 nsBranch Mispredict
L2 缓存读取7 nsL2 Cache Reference
互斥锁 加锁/解锁25 nsMutex Lock/Unlock
主存(RAM)读取100 nsMain Memory Reference
系统调用500 nsSystem Call
在 10Gbps 网络中发送 2KB 数据1.6 μsSend 2KB over 10Gbps Network
使用 Zippy 算法压缩 1KB 数据3 μsCompress 1KB with Zippy
上下文切换10 μsContext Switch
SSD 随机读取 (4-8KB)100 μsSSD Random Read (4-8KB)
从内存连续读取 1MB250 μsRead 1MB from Memory
数据中心内部往返 (RTT)500 μsDatacenter Round Trip
从 SSD 连续读取 1MB1 msRead 1MB from SSD
机械硬盘 (HDD) 寻道10 msHDD Disk Seek
从机械硬盘连续读取 1MB20 msRead 1MB from HDD
广域网往返 (加州到欧洲)150 msWAN Round Trip (CA-EU)

额外补充

操作项目 (Operation)延迟时间 (Latency)
广域网往返 (广州到上海)~ 30 ms
广域网往返 (广州到北京)~ 45 ms

2. 数据理解

  1. CPU对比内存存在100倍差距,所以选择合适的数据结构很重要,比如数组访问内存的次数比链表少,也就更快。
  2. 内存对比SSD存在1000倍差距,所以在磁盘操作中,尽量批量和顺序化。SSD读1MB需要1ms,随机读 4KB需要100μs,换算后1MB的数据随机读比顺序读慢25倍,所以在数据库,会利用追加写、合并写、批量 flush来做优化。
  3. 本地IO对比跨洲网络存在1000倍差距,远程调用是昂贵的,不要在循环里面发起调用,提供批量接口节省大量网络访问时间。
  4. 数据中心内部一次往返需要500μs,对比本地SSD随机读取在同体格数量级,相对机械硬盘一次寻道更快,所以会有分布式内存缓存系统,以及基于网络的块存储系统。
  5. 压缩可能比网络更快,压缩 1KB需要3μs,相对于一次RTT的500μs是非常划算,所以网关或者消息中间件一般都会选择开启压缩。

Reference

  1. Numbers Every Programmer Should Know By Year