我们口中说的性能不好是什么意思?

458 阅读3分钟

hello,大家好,我是1lo,想跟大家分享一下近期的学习,也记录一下近期的学习。

我们日常使用电脑的时候,总是会发现电脑开始卡顿,word文档开始崩溃,堪称人生十大崩溃瞬间之一。

当一台电脑性能不好的时候,我们是在说些什么呢?

一般来说性能好代表两部分:

  1. 响应时间
  2. 吞吐率

响应时间

指的是执行的很快,很快的能给到你结果,你算1+1马上给你2的结果。你一说小爱同学,马上小爱同学说 ”哎 ~ 有什么事?“。你一踩油门,马上到了100迈。

这就是响应时间,越快越好。

吞吐率

指的是搬运的很多,就像是一条10车道的大马路,和4车道的马路的区别,一个会堵车,一个通畅无比。就像是搬家,夫妻俩搬家俩人累的半死,喊上亲朋好友10个人一起搬,轻松惬意。

所以我们口中说的性能好指的是这响应时间短,吞吐率大。

一般来说吞吐率的提升是简单的,加机器,加硬件,四核变八核。而响应时间提升会困难不少,增加晶体管的密度和让晶体管开关更快,也就是CPU超频,都会导致CPU温度过高,烧掉主板或者CPU,这是一个物理限制。

那我们是怎么计算性能的呢?

性能=1/响应时间性能 = 1 / 响应时间

这个响应时间吧,如果是按得出结果的时间,是计算不准确的,因为计算机不是一条直线计算的,计算机有多个线程,CPU在计算的时候会不停的切换进程,所以计算出结果的时间,中间计算机还干了其他事情。另外硬盘读取数据有时候也比较慢,CPU处在空转的状态,所以也会不准。

linux系统中有time这个命令,会给出三个值:

  • real time 得出结果的时间
  • user time 运行指令的时间
  • sys time CPU计算的时间

所以,实际上运行时间 = user time + sys time。

但是拿到运行时间了,也是不能比较的,因为CPU处在降频或者超频的时候,运行速度也不一样,降频的时候运行慢一些比较正常。

所以我们换了个指标来测算计算时间。

程序的CPU执行时间=CPU时钟周期数×时钟周期时间程序的 CPU 执行时间 =CPU 时钟周期数×时钟周期时间

时钟周期时间

我们买电脑的时候,有一串指标,Intel Core-i7-7700HQ 2.8GHz,最后这个2.8GHz就是电脑主频,就是说1秒钟晶体管整栋2.8G次,主频越高,CPU运行越快。

CPU 时钟周期数

指的是运行一个程序,需要震动多少次晶体管。

这里可以继续分解成:

CPU时钟周期数=指令数×每条指令的平均时钟周期数(CPICPU时钟周期数 = 指令数 × 每条指令的平均时钟周期数(CPI)

就是一个程序需要多少指令,这些指令对应了多少次震动晶体管,每一次整栋晶体管需要多少时间。

程序的CPU执行时间=指令数×CPI×ClockCycleTime程序的 CPU 执行时间 = 指令数×CPI×Clock Cycle Time

如何优化?

如果要优化性能,可以从上面这个公式入手

  • 时钟周期时间,就是主频,就是震动一次晶体管的时间,摩尔定律指的就是这个
  • 每条指令平均时钟周期数,就是每一条指定需要多少次震动晶体管,这个需要计算机的组成和体系结构的优化
  • 指令数,通俗的就是讲程序需要多少指令,这个就是编译技术的挑战了

就像小时候罚抄书100遍,写字速度就是主频,拿三支笔一起写就是CPI,抄一本字数少的书就是指令数少。

总结

一个程序对应了多条语句,一条语句对应多条指令,一个指令对应多个CPU周期,也就是晶体管震动。

得出的一个程序CPU的执行时间。

我们口中性能的好坏,也就是在说 响应时间短,吞吐量大。

感谢 ~