现在我们已经知道了性能分析的涵义,还应该理解在产品开发周期中进行性能分析的重要性和实际意义。 性能分析并不是每个程序都要做的事情,尤其对于那些小软件来说,是没多大必要的(不像那些杀手级嵌入式软件或专门用于演示的性能分析程序)。性能分析需要花时间,而且只有在程序中发现了错误的时候才有用。但是,仍然可以在此之前进行性能分析,捕获潜在的bug,这样可以节省后期的程序调试时间。 在硬件变得越来越先进、越来越快速且越来越便宜的今天,开发者自然也越来越难以理解,为什么我们还要消耗资源(主要是时间)去对开发的产品进行性能分析。毕竟,我们已经拥有测试驱动开发、代码审查、结对编程,以及其他让代码更加可靠且符合预期的手段。难道不是吗? 然而,我们没有意识到的是,随着我们使用的编程语言越来越高级(几年间我们就从汇编语言进化到了JavaScript),我们愈加不关心CPU循环周期、内存配置、CPU寄存器等底层细节了。新一代程序员都通过高级语言学习编程技术,因为它们更容易理解而且开箱即用。但它们依然是对硬件和与硬件交互行为的抽象。随着这种趋势的增长,新的开发者越来越不会将性能分析作为软件开发中的一个步骤了。 让我们看看下面这种情景。 我们已经知道,性能分析是用来测量程序所使用的资源的。前面已经说过,资源正变得越来越便宜。因此,生产软件并让更多的客户使用我们的软件,其成本变得越来越低。 如今,随便开发一个软件就可以获得上千用户。如果通过社交网络一推广,用户可能马上就会呈指数级增长。一旦用户量激增,程序通常会崩溃,或者变得异常缓慢,最终被客户无情抛弃。 上面这种情况,显然可能是由于糟糕的软件设计和缺乏扩展性的架构造成的。毕竟,一台服务器有限的内存和CPU资源也可能会成为软件的瓶颈。但是,另一种可能的原因,也是被证明过许多次的原因,就是我们的程序没有做过压力测试。我们没有考虑过资源消耗情况;我们只保证了测试已经通过,而且乐此不疲。也就是说,我们目光短浅,结果就是项目崩溃夭折。 性能分析可以帮助我们避免项目崩溃夭折,因为它可以相当准确地为我们展示程序运行的情况,不论负载情况如何。因此,如果在负载非常低的情况下,通过性能分析发现软件在I/O操作上消耗了80%的时间,那么这就给了我们一个提示。有人可能觉得,在测试阶段程序运行很正常,在负载很重的情况下也应该不会有问题。想想内存泄漏的情况吧。在这种情况下,小测试是不会发现大负载里出现的bug的。但是,产品负载过重时,内存泄漏就会发生。性能分析可以在负载真的过重之前,为我们提供足够的证据来发现这类隐患。
Python性能分析与优化——1.2 性能分析的重要性
书名: Python性能分析与优化
作者: Fernando Doglio
出版社: 人民邮电出版社
原作名: Mastering Python High Performance
译者: 陶俊杰 | 陈小莉
出版年: 2016-6-1
页数: 178
定价: 45.00元
装帧: 平装
ISBN: 9787115424228