如果进入CPU的世界,时间会是怎样的?
2018-02-26 20:52:46 world6 阅读数 1295更多
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/world6/article/details/79375690
每个人都会有一些吐槽的想法存在,我替CPU把它的吐槽 放在我的博客里吧!
不知道大家有没有感觉每天写代码的时间过得很快啊,有时候一天过去了一个功能还没完成,但是时间就这么没了!
但是你知道CPU有多少苦水吗? 且听 CPU 慢慢的倾诉......
让我们看看什么是CPU的世界:CUP是电脑的心脏,CPU决定了这台电脑的上限。而决定CPU工作频率的是主频。
我的笔记本是 16年买的,主频好像是 2.6GHz。意味着每秒可以执行:2.6*10^9 个指令, 每个指令的时间大概是
0.38ns ,现在很多计算机的配置应该都比这个高了,但我还是就拿这个渣主频来说事吧。
在CPU的世界里,我就把这个CPU执行一个指令的时间 成为单元时间, 假设这个单元时间 对应的我们现实世界的 一秒钟,我们看看CPU的世界是如果在计算机中度过的。
一级缓存的读取速度是:0.5ns,对应的人类时间是 1.3s,这个速度还是挺快的,一般一级缓存的大小是 32K;
分支预测错误需要耗时 5ns 对应的人类时间是 13s 是不是有点久了?什么是分支预测
二级缓存的读取速度是:7ns,对应的人类时间是 18.2s, 如果一级缓存没有命中的话,再去二级缓存中找,二级缓存通常大小是 256K , 速度就慢了18倍了,所以redis里没有命中,如果要去DB种找的话,那个性能会差得更多。。不信接着下面的时间看...
每次内存寻址的速度是:100ns,对应的人类时间是 260S , 已经是四分多钟了,这还只是寻址,从内存中读取数据属于IO操作,IO操作更费时间,这就是 内存 跟 CPU 的速度不在一个量级的地方了。
一次 CPU 上下文的切换需要大概: 1500ns, 对应1.5us,对应的人类时间是 65分钟。一个小时我都可以可以玩好几把狼人杀了!!!我想大家在初学多线程的时候都知道上下文的切换是很耗时的操作,更恐怖的是,CPU在这“一个小时内”,啥事都不干,仅仅只是将自己的资源从一个线程切换到了另一个线程而已。这个过程还破坏了之前的缓存,让后续的计算更费时间。
在 1Gbps 的网络上传输 2K 的数据需要 20us,对应的人类时间是14.4小时,也就是说你在聊天时发送一个表情,CPU能够看完一季的 “饭局的诱惑”了,所以说网络的传输是很慢的。
比网络传输 性能更低的是 IO 操作,如果你的电脑能够搭配上一块 SSD ,你一定感觉你的电脑要飞起来了。然鹅...
SSD 寻址耗时为 180us,对应的人类时间大约是 5天,也就是说 你才找到你上班的位置,CPU已经把这个星期的班都上完了。虽然SSD比机械硬盘快很多倍,但是 跟内存 比起来都弱爆了,更别 想着跟CPU 比了。
从内存中读取 1MB 的连续数据,耗时大约为 250us,对应的人类时间是 7.5天,内存处理一份文件的时间,CPU已经把一个星期的活干完了,还加了班....
同一个数据中心网络上跑一个来回需要 0.5ms,对应的人类时间大约是 15天,也就是半个月的时间。如果你的程序有段代码需要和数据中心的其他服务器交互,在这段时间里 CPU 都已经狂做了半个月的运算。减少不同服务组件的网络请求,是性能优化的一大课题。所以分布式服务中,经常会有要优化请求这些的难题,包括不限于 dubbo 请求超时,失败 怎么处理 等等
从 SSD 读取 1MB 的顺序数据,大约需要 1ms,对应的人类时间是 1个月。只比内存慢了四倍,但CPU 都可以过两个春节还不止了...... 才过完的春节,,,真的好快
再让我们来看看磁盘的表现:
磁盘寻址时间为 10ms,对应的人类时间是 10个月,10月怀胎,每位母亲都享受过这漫长的岁月。。。不易...感恩~
这也可以看出,磁盘慢爆了,大概是蜗牛跟飞机的区别?上下文的切换,还有寻址这些的操作,真的很费时,因为这期间硬盘啥事都干不了,你要是能提前读取磁盘的内容也好啊,当然这是不可能的。。
从磁盘读取 1MB 连续数据需要 20ms,对应的人类时间是 20个月。为什么说硬盘是计算机性能的瓶颈呢,因为你的CPU 再好,内存再大,你不买SSD,你的电脑就是个瓜皮。。。你想想你在京东买了个能让你兴奋的东西,结果等了快两年才送到你手上的感觉么?
数据请求在地球上两个不同城市之间来回走一趟大概需要150ms,对应的人类时间是12.5年,你能想象过年抢票的时候,你在深圳请求北京的服务器,跟北京的人请求北京的服务器抢同一张票,你把鼠标砸烂你都抢不过别人的无奈么。。当然CDN 就是这个问题的一个解决方案:让用户和最接近自己的服务器交互,从而减少网络上报文的传输时间。
相比大家对CPU , 内存 ,硬盘, 网络的性能都有个基本的概念。我也是最近才了解到的,难怪大佬们都说 计算机组成原理很重要,不懂这些真的很难理解多线程,网络请求里面的一些问题。
原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/11749346.html