WHAT?
本章讨论程序性能调整问题。但是对用户来说,程序员按时交付软件,提供一个清爽的用户界面,避免系统经常死机常常比程序性能更加重要
WHY?
在程序设计这种文化中,编写出能够节省几微秒的代码可以证明你很酷--
HOW?
Pareto法则
即80/20法则,指你可以通过20%的努力获取80%的成果
一些无稽之谈
- 在搞基高级语言中,减少代码行数可以加快代码执行速度
- 特定运算可能比其他的更快,代码规模也较小:在某个环境下提升程序性能的方法放到另一个环境中可能会损害程序性能。在调整代码的时候你实际上隐含了一个承诺,即你将根据环境变化(包括编译器种类、版本、库版本的改变等)重新进行剖测和调整
- 应当随时随地进行优化
- 程序的运行速度同其正确性一样重要:在程序无法正确运行时,不可能去要求程序应当更小巧或运行更快
常见的低效率之源
- 输入/输出操作:程序效率底下的根源之一就是不必要的输入/输出,优先在内存中处理文件,而不是磁盘、数据库或者网络
- 分页:引发操作系统缺页中断(page faults)的运算会比在同一页的运算慢很多
- 系统调用:调用系统子程序的代价是非常可观的,通常涉及系统的上下文切换(context switch)——保存程序状态、恢复内核状态等
- 解释型语言:慢于编译型语言
- 错误:比如数据库缺少索引
性能测量
- 如果没有测量性能变化,那么你想当然的优化结果不过是代码变得更加晦涩难懂
- 应当用分配给程序的cpu时钟来计算,而不是日期时钟
- 应当明确测量程序初始化带来的额外系统负担