如果进入CPU的世界,时间会是怎样的?

2018-02-26 20:52:46 world6 阅读数 1295更多

分类专栏: 网络 缓存服务 架构
 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

每个人都会有一些吐槽的想法存在,我替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 , 内存 ,硬盘, 网络的性能都有个基本的概念。我也是最近才了解到的,难怪大佬们都说 计算机组成原理很重要,不懂这些真的很难理解多线程,网络请求里面的一些问题。

【转帖】如果进入CPU的世界,时间会是怎样的?的更多相关文章

  1. highstock-处理时间需要处理世界时间偏移量

    highstock的数据格式采用的是[[时间,数据],[时间,数据],[时间,数据],[时间,数据]],而时间采用的是13位的毫秒值,如[1133136000000,69.66],采用的时间格式为UT ...

  2. [转帖]Docker容器CPU、memory资源限制

    Docker容器CPU.memory资源限制 https://www.cnblogs.com/zhuochong/p/9728383.html 处理事项内容等 这一块内容感觉 不清楚.. 背景 在使用 ...

  3. [转帖]linux下CPU、内存、IO、网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具

    linux下CPU.内存.IO.网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具 https://blog.51cto.com/hao360/1587165 linux_python关 ...

  4. JQuery 世界时间

    根据表格的时间显示表格的时间,本机的时间,韩国的时间 <%@ Page Language="C#" AutoEventWireup ="true" Cod ...

  5. [转帖]创建文件或修改文件时间 touch

    Linux命令(五)创建文件或修改文件时间 touch https://www.cnblogs.com/ay-a/p/7900274.html touch -t .x86_64.rpm 记得 wind ...

  6. [转帖]centos7设置CPU的运行频率为performance

    centos7设置CPU的运行频率为performance http://www.512873.com/archives/612.html Publish: March 6, 2019 Categor ...

  7. [转帖] 飞腾FT2000+ CPU的进展(2019.6)

    中国长城:拟进一步收购飞腾股权,强化信息基础设施国产化平台地位 2019-06-26 09:28 http://www.sohu.com/a/323065095_100016383 今年年中的事情 浪 ...

  8. 历史执行Sql语句性能分析 CPU资源占用时间分析

    SELECT     HIGHEST_CPU_QUERIES.PLAN_HANDLE,     HIGHEST_CPU_QUERIES.TOTAL_WORKER_TIME,     Q.DBID,   ...

  9. 墙上时钟时间 ,用户cpu时间 ,系统cpu时间

    一. 墙上时钟时间 ,用户cpu时间 ,系统cpu时间定义与联系 时钟时间(墙上时钟时间wall clock time):从进程从开始运行到结束,时钟走过的时间,这其中包含了进程在阻塞和等待状态的时间 ...

随机推荐

  1. TCP采用四次挥手关闭连接如图所示为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

    tcp四次挥手,由于TCP连接是全双工的,因此每个方向都必须单独进行关闭. 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭.这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个 ...

  2. computed的用法

    其实在摸板中也是可以做简单的计算的,但是会看起来会很乱 ,可以用computed来做计算 <!DOCTYPE html> <html lang="en"> ...

  3. Emmet语法规则

    HTML速写之Emmet语法规则 Emmet-写HTML/CSS快到飞起 在前端开发的过程中,最费时间的工作就是写 HTML.CSS 代码.一堆的标签.属性.括号等,头疼.这里推荐一个Emmet语法规 ...

  4. 【深度学习】关于Adam

    版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_31866177/articl ...

  5. Go -- client 302 自动转 200 问题 cookie存储 模拟登陆问题

    不久前用go写了个http client,去模拟某网站(*.com)的登录操作.网站的登录逻辑:1.验证登录账号和密码:2.下发token.此token通过cookie下发:3.redirect到主页 ...

  6. Linux下用jar命令替换war包中的文件【转】

    问题背景:在Linux环境上的weblogic发布war包,有时候只是修改了几个文件,也要上传整个war包,这样很费时间,因此整理了一下Linux环境,更新单个文件的方法. 1.如果要替换的文件直接在 ...

  7. python blob操作

    最近在学习使用Python,操作Oracle数据库采用的是cx_Oracle模块. 对于基本字段,都可以正常操作.但是对于Blob字段,我试试好几次,都没成功.下面贴出测试代码,与大家讨论讨论. 这是 ...

  8. 一个机器绑两个IP可能存在的问题

    1.同一网段两个ip 无法绑到一个机器上. 因为会生成两条该网段路由,两个路由用于同网段报文相应,而实际ip选路时只会选择其中一条路由(估计会选择前面那一条)从一个网卡走.这样不管哪个网卡来的局域网内 ...

  9. sqllite connectionstring setting

    https://www.connectionstrings.com/sqlite/ SQLite.NET Basic Data Source=c:\mydb.db;Version=3; Version ...

  10. JDK1.7 和JDK1.8同时存在设置默认的JDK

    最近学习SpringCloud需要安装JDK1.8 但是自己的项目在1.8的环境中运行不了 无论怎么修改使用cmd  中命令的java -version 都显示是jdk 1.8 将java home  ...