每个程序员都应该知道的数字

发布日期 2016年3月18日

这几个数字是硬件操作的耗时,单位是纳秒,随着硬件的发展这些数字应该会越来越小。但几种不同的调用间的比例关系应该不会太大的变动。基于这些数据,大家就能评估出来,一些操作的性能差异,例如当mysql临时排序的时候,当需要排序的内容如果没有超过一个阈值的时候会把数据放到内存,超过以后会放到本地磁盘,这两者的性能差异就能根据disk和内存操作的差异计算出来性能的高低。

1秒=1000毫秒
1毫秒=1000微秒
1微秒=1000纳秒
1纳秒=1000皮秒
1皮秒=1000飞秒

L1 cache reference                             0.5 ns
Branch mispredict                              5 ns
L2 cache reference                             7 ns
Mutex lock/unlock                            100 ns (25)
Main memory reference                        100 ns
Compress 1K bytes with Zippy              10,000 ns (3,000)
Send 2K bytes over 1 Gbps network         20,000 ns
Read 1 MB sequentially from memory       250,000 ns
Round trip within same datacenter        500,000 ns
Disk seek                             10,000,000 ns
Read 1 MB sequentially from network   10,000,000 ns
Read 1 MB sequentially from disk      30,000,000 ns (20,000,000)
Send packet CA->Netherlands->CA      150,000,000 ns