每个程序员都应该了解的延迟数字

码农有道公众号

共 1418字,需浏览 3分钟

 · 2024-01-05

Jeff Dean 在他关于分布式系统的 ppt [1] 中列出了“每个程序员都应该了解的数字(Numbers Everyone Should Know)”,对计算机各类操作的耗时做了大致估计。这些数字在很多地方都很有用, 了解这些数字有助于我们在系统设计时比较不同的解决方案,挑选一个最优的方案。

这些数字大多是 2009 年给出的,计算机发展到今天, 内存、SSD 和机械硬盘顺序读取速度有了非常大的提升,导致 这些数字有些过时,下面给出2020年左右的一些数据。

需要注意的是我们 重点在于关注这些延迟数据之间的数量级和比例 ,如寄存器/L1/L2缓存的访问时间在ns级别 左右;内存访问速度大约是 磁盘访问速度的10w倍。而不是纠结于寄存器的访问时间究竟是几ns,这也不可能有一个统一的答案,因为每台计算机的硬件不一样性能 也不一样。

1ns级别: 对cpu寄存器的访问在1ns这个级别。现代cpu的时钟周期也在1n秒范围内。

ec2e1df5d8ea616099c821f835720b2c.webp

1-10ns级别: L1/L2缓存的访问时间以及一些复杂的cpu指令(类似分支预测错误惩罚)的执行时间都在这个级别。

72a1f618692b1cdbb4ed30d0a497fcc0.webp

10-100ns级别 :L3缓存的访问时间在这个级别。

a8b4d632f04ebaca852c218880495734.webp

100-1000ns级别: Linux上一个简单的系统调用(只考虑系统陷入内核直接返回的时间,不考虑执行系统调用本身的时间)需要几百ns;MD5生成 64位散列值大约需要200ns。

54edc6f1b7231a68f56196a81a62779f.webp

1-10us级别: Linux内核上下文切换的时间;主内存数据复制的时间级别。

b344f74eddabae1519f299b1689a08cf.webp

10-100us级别: Nginx大约需要50us处理一个http请求;顺序从主存读取1M数据大约是50us;

4ef887d360a142bc0a2f077465d0c7a7.webp

100-1000us级别: SSD写入一页大概需要1000us,区域内网络返回需要几百us;Memcache/Redis的get操作大概在几百到1000us。

46be08c1e2cb04575de57ef97f705edc.webp

6e06eb2262693aca5ee6fc713f58d032.webp

1-10ms级别: 现代云网络区域间的网络往返时间在这个时间范围;磁盘驱动器的寻道时间在5ms左右(硬盘)。

99d4252b2544a83142b1199def99c7cc.webp

10-100ms级别: 从主内存顺序读取1GB数据花费的时间在这个范围内。

4612e005fcc44e8ccbb0b868e2f5261b.webp

100-1000ms级别: bcrypt加密需要的时间大约在300ms;TLS握手通常在250ms到500ms范围;从SSD连续读取1GB数据也是这个时间范围。

48702cbafc7056d2dbe2a98f89238174.webp

ee5421a4d1300a7eb9b4a481429f123d.webp

b393467576f2c50967fb77f2df9f7e76.webp

1s级别: 相同的云区域内通过网络传输1GB数据大约需要10S。

50eab2b3a3d878851346a64cfe1a2e45.webp

1-10ms级别:L1/L2缓存的访问时间以及一些复杂的cpu指令的执行时间都在这个级别。1-10ns级别: L1/L2缓存的访问时间以及一些复杂的cpu指令的执行时间都在这个级别。

推荐阅读:

完全整理 | 365篇高质技术文章目录整理

算法之美 : 栈和队列

主宰这个世界的10大算法

彻底理解cookie、session、token

浅谈什么是递归算法

专注服务器后台技术栈知识总结分享

欢迎关注交流共同进步

码农有道  coding


码农有道,为您提供通俗易懂的技术文章,让技术变得更简单!

浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报