2.27

如果程序只是运行一个计算密集型的任务,那么分析器会自动地告诉我们程序中的热点在
哪里。不过如果程序要做许多不同的处理,可能在分析器看来,没有任何一个函数是热
点。程序还有可能会花费大量的时间等待 I/O 或是外部事件,这样降低了程序的性能,增
加了程序的实际运行时间。在这种情况下,我们需要测量程序中各个部分的时间,然后试
着减少其中低效部分的运行时间。

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

一点关于测量时间的知识

一次完美的测量是指精确地得到大小、重量或者在本内容中是某个事件每次持续的时间。完
美的测量就像是将弓箭不断地精准地射中靶心一样。这种箭术只存在于故事书中,测量也
是一样的

真正的测量实验(就像真正的弓箭)必须能够应对可变性variation:可能破坏完美测
量的误差源。可变性有两种类型:随机的和系统的。随机的可变性对每次测量的影响都不
同,就像一阵风导致弓箭偏离飞行线路一样。系统的可变性对每次测量的影响是相似的,
就像一位弓箭手的姿势会影响他每一次射箭都偏向靶子的左边一样。
可变性自身也是可以测量的。衡量一次测量过程中的可变性的属性被称为精确性precision
正确性trueness。这两种属性组合成的直观特性称为准确性accuracy

posted @ 2025-02-27 20:44  欧吼吼  阅读(5)  评论(0)    收藏  举报