2.以空间换时间
软件的高性能并不是凭空产生的,在解决了空间和时间浪费的问题之后,如果用户还有更高的性能要求,我们软件人员只好“偷梁换柱”,做一下调整,而这种调整往往是很灵活的。
空间换时间是软件人员解决性能问题最常见的方法。是在系统功能正常的前提下增大软件空间开销的方法来缩减运行的时间。一般的方法有算法调整、并行计算方法、体系结构方法和一些不是“办法”的办法。
通常的解决方案有Cache缓存、数据库的index等。
案例4
一个动态网站服务器总发生CPU耗尽的问题,因此造成给用户的响应缓慢或者长时间没有响应,进而引起Server的宕机。经调查分析,网站首页是个PHP程序,每次用户访问都要多次查询数据库,也没有Cache机制,数据库查询负荷过高,耗尽CPU。
解决:改写网站首页以及部分频繁访问的程序,增加Cache机制,减少数据库访问。
原理:将常用数据放在服务器的内存中,虽然增加了内存的开销,但带来了时间上的优化,对用户而言,提高了处理速度。
3.以时间换空间
时间换空间的方案解决性能问题的情形比较少。有时会出现在对内存要求十分苛刻的地方,比如嵌入式操作系统中。
案例5
程序设计的要求是不设中间变量,交换两个变量的值。
我们通常的中间变量的解决方案是:
Void swapOne(int *a, int *b)
{
Int temp;
Temp = *a;
*a = *b;
*b= temp;
}
但这里需要在程序中为temp变量在栈上分配一个空间。可不可以不用这个temp变量呢?
解决:
修改程序如下:
void swapTwo(int *a,int *b)
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
原理:修改之后,多了运算复杂度,但没有使用第三方变量,减少了空间的占用。
以上是我们从简单的程序例子来理解性能解决方案,但现实要远远复杂得多,因为随着软件系统功能的复杂强大,软件的规模也在不断扩大,我们不可能完全自己开发程序,很多时候是利用已有的平台和中间件资源。在这种场景下,我们应该怎样考虑性能问题呢?
第一,软件系统设计的架构及技术平台
软件在设计阶段一旦决定采用哪种架构和技术,其性能也就注定只能在一定的范围内变动了。这就是“先天”因素。比如在上节讲到的一个删除/增加数据的业务操作,如果用户对时间非常苛刻,密集型计算、在线的大数据量统计和分析等应用,这些场景通常J2EE不能够很好地解决,使用C++或者其他平台搭建会更合理些。如果在这些场景下硬要采用J2EE架构,那么开发和设计人员如何绞尽脑汁,优化设计和程序,也不会满足用户的性能要求。
第二,中间件的设置和优化
这里的中间件是广义的中间件,是应用程序调用的第三方软件,包括操作系统、数据库、Web服务器、消息服务器等。我们不能改变中间件的程序,只能通过调优手段来提高它所支持的软件系统的性能。
第三,硬件的配置
这里包括服务器硬件配置和网络环境。服务器硬件包括内存、CPU等,网络环境有交换机、路由器等。
本文选自:《51Testing软件测试作品系列》之一的《性能测试从零开始——LoadRunner入门》 ,本站经电子工业出版社和作者的授权,近期将进行部分章节的连载,敬请期待!
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。