下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

什么是性能优化?

作者:课课家教育     来源: http://www.kokojia.com点击数:1180发布时间: 2016-07-09 08:17:10

标签: 性能优化系统硬件

  一、什么是性能优化?

  性能优化,就是在不影响系统正确运行的前提下,使之运行得更快,完成特定功能所需的时间更短。

  性能优化大到要在系统设计之初就考虑硬件、操作系统和基础软件平台等方面的选择;小到要考虑每个子系统的设计、算法选择、代码编写、编译器使用的选项、如何发挥硬件的最大性能等。

  只有对硬件平台足够熟悉,才能把硬件的最大效能发挥出来。另外,如何把硬件相关代码和硬件无关代码分离是一个很重要的技能。如果代码都是与硬件相关的,针对某一硬件平台优化就失去了可移植性,而且软件的性价比不一定高。

  性能优化只是系统的一个方面,它会和系统的其他要求有冲突,比如以下这些要求:

  (1)可读性:性能优化不能影响可读性,看起来不怎么漂亮的代码,没有人愿意维护。

  (2)模块化:性能优化往往需要打破模块的边界,想想这是否值得。

  (3)可移植:隔离硬件相关的代码,尽量使用统一的API。

  (4)可维护:许多性能优化的技巧,会导致后来维护代码的人崩溃。

  需要在性能优化和上述的几个要求之间做出trade off,不能一意孤行。

  二、性能优化的目标

  性能优化的目标无非是以下这两个:

  1.时间性能:减小系统执行的时间

  2.空间性能:减小系统占用的空间

  因此优化的策略就是对系统进行分解、测量:(1)分解:系统包含的子系统,执行路径,函数,指令等;(2)测量:每个子系统,执行路径,函数,指令所花费的时间和空间。

  然后,选取执行次数最多、消耗时间最长的函数进行优化(但消耗时间最长的函数不一定就是优化的对象,这需要放到某个执行路径上去考察,优化最常使用的执行路径)。

  三、性能优化的三个层次

  (1)系统层次:关注系统的控制流程和数据流程,优化主要考虑如何减少消息传递的个数;如何使系统的负载更加均衡;如何充分利用硬件的性能和设施;如何减少系统额外开销(比如上下文切换等)。

  (2)算法层次:关注算法的选择(用更高效的算法替换现有算法,而不改变其接口);现有算法的优化(时间和空间的优化);并发和锁的优化(增加任务的并行性,减小锁的开销);数据结构的设计(比如lock-free的数据结构和算法)。

  (3)代码层次:关注代码优化,主要是cache相关的优化(I-cache,D-cache相关的优化);代码执行顺序的调整;编译优化选项;语言相关的优化技巧等等。

  性能优化需要相关的工具支持,这些工具包括编译器的支持、CPU的支持、以及集成到代码里面的测量工具等。这些工具主要目的是测量代码的执行时间以及相关的cache miss,cache hit等数据,也可以帮助开发者定位和分析问题。

  四、性能优化和性能设计

  性能优化和性能设计的比较:性能设计包含了设计、编码、测试的整个环节,是产品生命周期的第一个阶段;而性能优化,通常是在现有系统和代码基础上所做的改进,属于产品生命周期的后续几个阶段(假设产品有多个生命周期)。所以,性能优化不是重新设计,而是在现有的产品和代码上进行优化。

  性能优化的方法和技巧可以指导性能设计,但两者的方法和技巧不能等同。两者关注的对象也不同。性能设计是从正向考虑问题:如何设计出高效,高性能的系统;而性能优化则相反,是从反向考虑问题:在出现性能问题时,如何定位和优化性能。性能设计考验的是开发者正向建设的能力,而性能优化考验的是开发者反向修复的能力。这两者可以互补。

  五、性能优化的重要性

什么是性能优化?_系统_硬件_课课家

  性能优化可以提高下载和运行的速率,从而减少用户的流失。据统计,71%的用户期望移动页面跟PC页面一样快,74%的用户能容忍的响应时间最多为5秒,所以我们必须保证移动端页面要有足够快的速度,即以最快的速度做出响应。

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程