11.1
如果程序只是运行一个计算密集型的任务,那么分析器会自动地告诉我们程序中的热点在
哪里。不过如果程序要做许多不同的处理,可能在分析器看来,没有任何一个函数是热
点。程序还有可能会花费大量的时间等待 I/O 或是外部事件,这样降低了程序的性能,增
加了程序的实际运行时间。在这种情况下,我们需要测量程序中各个部分的时间,然后试
着减少其中低效部分的运行时间。
开发人员通过不断地缩小长时间运行的任务的范围直至定位其中一段代码花费了太长时
间,感觉不对劲这种方式来查找代码中的热点。在找出这些可疑代码后,开发人员会在测
试套件中对小的子系统或是独立的函数进行优化实验。
测量运行时间是一种测试关于“如何减少某个特定函数的性能开销”的假设的有效方式。
一般,我们很难意识到可以通过编程在计算机上实现秒表功能。你可以非常方便地使用手
机或是手提电脑在工作日的 6:45 叫醒你,或是在早上 10 点的站立会议前 5 分钟提醒你
参加会议。但是在现代计算机上测量亚微秒级的运行时间却是有点难度的,特别是因为在
普通的 Window/PC 平台上存在没有可以稳定地工作于不同型号的硬件和不同的软件版本
上的高精度计时器的历史遗留问题。
因此,作为一名开发人员,你需要随时准备好制作一个自己的秒表,而且必须知道它们以
后可能会发生变化。为了使这成为可能,接下来我会讨论如何测量时间以及有哪些工具可
用于在计算机上测量时间。