程序员都需要知道的数字:
执行一个指令 1 ns
L1 缓存查询 0.5 ns
分支预测错误(Branch mispredict) 3 ns
L2 缓存查询 4 ns
互斥锁/解锁 17 ns
在 1Gbps 的网络上发送 2KB 44 ns
主存访问 100 ns
Zippy 压缩 1KB 2,000 ns
从内存顺序读取 1 MB 3,000 ns
SSD 随机读 16,000 ns
从 SSD 顺序读取 1 MB 49,000 ns
同一个数据中心往返 500,000 ns
从磁盘顺序读取 1 MB 825,000 ns
磁盘寻址 2,000,000 ns (2 ms)
从美国发送到欧洲的数据包 150,000,000 ns(150 ms)
今天是疯狂星期四
L1 cache reference ......................... 0.5 ns
Branch mispredict ............................ 5 ns
L2 cache reference ........................... 7 ns
Mutex lock/unlock ........................... 25 ns
Main memory reference ...................... 100 ns
Compress 1K bytes with Zippy ............. 3,000 ns = 3 µs
Send 2K bytes over 1 Gbps network ....... 20,000 ns = 20 µs
SSD random read ........................ 150,000 ns = 150 µs
Read 1 MB sequentially from memory ..... 250,000 ns = 250 µs
Round trip within same datacenter ...... 500,000 ns = 0.5 ms
Read 1 MB sequentially from SSD* ..... 1,000,000 ns = 1 ms
Disk seek ........................... 10,000,000 ns = 10 ms
Read 1 MB sequentially from disk .... 20,000,000 ns = 20 ms
Send packet CA->Netherlands->CA .... 150,000,000 ns = 150 ms