性能优化之序言

性能是可能性

技术上很多事情,是因为性能,才成为可能性。

因为性能才是成本的保证,只有战胜成本,才可以创造盈利。

另外性能还是用户体验的保证,正是因为网上支付的这种速度,才保证了用户不用跑银行耽误1个小时,而放弃某些购物行为。

关注的内容

本文的关注内容,是性能优化

性能优化指在特定资源的情况下,更多的完成特定的任务,在特定的资源下,可以让用户体验更加好,也就是优化吞吐量和响应时间

  •  吞吐量 特定时间完成的业务数量
  •  响应时间 完成特定任务需要的时间

本文可能涉及到以下一些方面的内容

  • 计算机上一些资源的正确认识
  • 度量计算机资源的一些工具和方法
  • 度量计算机资源如何被应用使用的一些工具和方法
  • 如何测试完成的任务
  • 从各个方面完成性能优化任务的一些参考

根据前面的介绍,本文会集中在处理性能优化这个事情上,那么,在这个事情上,我们有以下一些指导原则。

首先,我们的程序是代码写的。

性能就是关于代码的一切。

  • 程序执行所经过的指令
  • 队列等待,等待你程序处理需要的一些资源,包含但不限于cpu,磁盘,网络,内存
  • 一致性等待,等待和你交互的一些线程的结果,用于你执行你的下一步动作 

为了优化上面说道的代码的一切,我们的最高级的原则就是 做的更少,或者做的更快.

至于什么内容做的更少,怎么做的更快,可以先看下面关于吞吐量和响应时间和计算机资源的一些基本公式

吞吐量和rt的一些基本公式

  • 请求响应时间=程序指令消耗cpu处理时间+等待时间(等待时间=队列等待+一致性等待)
  • 吞吐量=cpu数/程序指令消耗cpu处理时间
    • 可以把下面最佳线程数的公式代入,可以从更多维度参考
  • 最佳线程数=cpu数(请求响应时间/程序指令消耗cpu处理时间)
  • 有资源池限制的时候:吞吐量=资源池数量/每个请求占用资源的时间
    • 资源池:线程池,锁,数据库池等
    • 锁属于一个池大小为1的池

从这些公式我们可以看到

  • 优化响应时间:从程序指令和等待时间入手
  • 优化吞吐量:从程序指令入手
  • 特别注意,不要做一些参数限制硬件资源的发挥

另外从优化的力度上,是按照下面的这个顺序排列的

  • 业务:如果某块业务可以优化,直接不参与关键路径,当然是最好的方法
  • 基础技术:这个优化,基本可以扩展到使用这个基础技术的所有业务,受益也是非常大的
  • 应用代码:只针对本应用的一些优化

但是实际上,上述三者经常都是结合起来做的。没有非常明显的界限。

原文地址:https://www.cnblogs.com/bqcoder/p/6233967.html