性能优化之序言
性能是可能性
技术上很多事情,是因为性能,才成为可能性。
因为性能才是成本的保证,只有战胜成本,才可以创造盈利。
另外性能还是用户体验的保证,正是因为网上支付的这种速度,才保证了用户不用跑银行耽误1个小时,而放弃某些购物行为。
关注的内容
本文的关注内容,是性能优化
性能优化指在特定资源的情况下,更多的完成特定的任务,在特定的资源下,可以让用户体验更加好,也就是优化吞吐量和响应时间
- 吞吐量 特定时间完成的业务数量
- 响应时间 完成特定任务需要的时间
本文可能涉及到以下一些方面的内容
- 计算机上一些资源的正确认识
- 度量计算机资源的一些工具和方法
- 度量计算机资源如何被应用使用的一些工具和方法
- 如何测试完成的任务
- 从各个方面完成性能优化任务的一些参考
根据前面的介绍,本文会集中在处理性能优化这个事情上,那么,在这个事情上,我们有以下一些指导原则。
首先,我们的程序是代码写的。
性能就是关于代码的一切。
- 程序执行所经过的指令
- 队列等待,等待你程序处理需要的一些资源,包含但不限于cpu,磁盘,网络,内存
- 一致性等待,等待和你交互的一些线程的结果,用于你执行你的下一步动作
为了优化上面说道的代码的一切,我们的最高级的原则就是 做的更少,或者做的更快.
至于什么内容做的更少,怎么做的更快,可以先看下面关于吞吐量和响应时间和计算机资源的一些基本公式
吞吐量和rt的一些基本公式
- 请求响应时间=程序指令消耗cpu处理时间+等待时间(等待时间=队列等待+一致性等待)
- 吞吐量=cpu数/程序指令消耗cpu处理时间
- 可以把下面最佳线程数的公式代入,可以从更多维度参考
- 最佳线程数=cpu数(请求响应时间/程序指令消耗cpu处理时间)
- 有资源池限制的时候:吞吐量=资源池数量/每个请求占用资源的时间
- 资源池:线程池,锁,数据库池等
- 锁属于一个池大小为1的池
从这些公式我们可以看到
- 优化响应时间:从程序指令和等待时间入手
- 优化吞吐量:从程序指令入手
- 特别注意,不要做一些参数限制硬件资源的发挥
另外从优化的力度上,是按照下面的这个顺序排列的
- 业务:如果某块业务可以优化,直接不参与关键路径,当然是最好的方法
- 基础技术:这个优化,基本可以扩展到使用这个基础技术的所有业务,受益也是非常大的
- 应用代码:只针对本应用的一些优化
但是实际上,上述三者经常都是结合起来做的。没有非常明显的界限。