C 为什么时间总是在变化?
我执行了一个程序,当我计算经过的时间时,我发现时间不是常数。它在一定范围内变化。我想知道为什么会这样?因为有许多进程与应用程序同时运行 即使您成功地将应用程序完全隔离,也不能保证每次都以相同的速度运行相同的代码。这就是为什么如果您正在测试性能(假设您在这里所做的就是这样),那么您应该在多次运行中获得平均值 如果您要衡量效率,有更多客观/正式的定义方法:C 为什么时间总是在变化?,c,C,我执行了一个程序,当我计算经过的时间时,我发现时间不是常数。它在一定范围内变化。我想知道为什么会这样?因为有许多进程与应用程序同时运行 即使您成功地将应用程序完全隔离,也不能保证每次都以相同的速度运行相同的代码。这就是为什么如果您正在测试性能(假设您在这里所做的就是这样),那么您应该在多次运行中获得平均值 如果您要衡量效率,有更多客观/正式的定义方法: 请参见:在测量经过的时间时,您经常会发现这种行为。这是因为运行时间取决于计算机可能执行的所有其他操作 例如,见: pax> time sl
请参见:在测量经过的时间时,您经常会发现这种行为。这是因为运行时间取决于计算机可能执行的所有其他操作 例如,见:
pax> time sleep 1
real 0m1.012s
user 0m0.004s
sys 0m0.000s
pax> time sleep 1
real 0m1.002s
user 0m0.004s
sys 0m0.000s
pax> time sleep 1
real 0m1.007s
user 0m0.004s
sys 0m0.000s
在所有这些情况下,经过的real
时间各不相同,但处理器的实际使用,user+sys
非常一致
对于计时,应使用最精确的测量值(如user+sys
)来消除外部影响。您还应该使用统计技术来获得更准确的图片
例如,我倾向于做12次运行,扔掉异常值(最快和最慢),然后平均剩下的10次。因为你的计算机做的不止一件事。没有什么是恒定的(除了
const
):p唯一不变的是“Change”。这里user+sys
是一致的,因为代码微不足道。由于缓存污染、资源争用(例如,如果多个进程正在执行io)等原因,如果其他进程正在运行,则实际代码的用户时间和系统时间将大不相同,但我要说的是使用尽可能精确的度量-user+sys
仍然比经过的时间更精确,统计平均值将减轻其他因素的影响。