我执行了一个程序,当我计算时间流逝时,我发现时间不是恒定的。它在一定范围内变化。我想知道为什么是这样?为什么时间不断变化?
回答
因为有许多进程与您的应用程序同时运行。
即使您设法完全隔离您的应用程序,也无法保证相同的代码每次都会以相同的速度运行。这就是为什么如果你正在测试性能的话,你应该在多次运行的平均值上进行测试(假设这就是你在做的)。
如果正在测量效率,也有定义它的更客观/正规途径:
参见:Big-O notation
你经常会发现这样的行为时测量经过时间。这是因为经过的时间取决于您的计算机可能正在做的所有其他事情。
参见例如:
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
)来消除外部影响。您还应该使用统计技术来获得更准确的图像。例如,我倾向于做十二次运行,扔掉异常值(最快和最慢),然后平均剩余的十次。
这里'user + sys'只是一致的,因为代码很简单。如果其他进程正在运行,由于缓存污染,资源争用(例如,如果多个进程正在执行io等),实际代码将具有广泛不同的'用户'和'系统时间'等。 – 2010-08-16 06:21:41
毫无疑问,但我所做的是尽可能精确地使用度量 - '用户+系统'仍然比经过的时间精确得多,统计平均将减轻其他因素的影响。 – paxdiablo 2010-08-16 06:40:45
- 1. 为什么grepping PID不断变化?
- 2. Windows 8时间变化不断
- 3. PHP date_default_timezone_set不改变时间() - 为什么?
- 4. 为什么PermGen空间不断增长?
- 5. SessionID在ASP.NET MVC中不断变化,为什么?
- 6. 为什么重定向不断变化的地址栏
- 7. 为什么回调前的持续时间不断增加?
- 8. 是不断变化
- 9. 不断变化页
- 10. 为什么我的位置不断变化,我的代码不正确?
- 11. Hive表中的时间戳不断变化
- 12. py.test:嘲讽不断变化的日期时间对象
- 13. 什么是不变文化?
- 14. 为什么在运行时不DataDirectory目录变化
- 15. 路由发生变化时,为什么不发出HTTP请求?
- 16. 触摸次数变化时为什么触摸不会触发?
- 17. 为什么变量值异常变化
- 18. 为什么我设定时间但变得不同?
- 19. 为什么散列表的平均访问时间不变?
- 20. 为什么autograd不会为中间变量产生渐变?
- 21. 为什么Thread.Sleep长时间不精确?
- 22. 为什么变量有时不分配?
- 23. Ubuntu inet addr不断变化
- 24. NSMutableArray计数不断变化
- 25. DetailTextLabel不断变化的UITableViewCell
- 26. 事件值不断变化
- 27. Oracle 10g为什么要to_char(日期时间)截断字符串?
- 28. 为什么常变量不被视为编译时间常数有时
- 29. Sharepoint为什么不断重新格式化HTML?
- 30. 为什么小空间不断出现在我的网页中?
因为你的电脑做了不止一件事情。 – GManNickG 2010-08-16 05:58:24
什么都不是常数(除了'const'):P – alex 2010-08-16 05:58:27
唯一不变的是“更改”。 – 2010-08-16 06:07:23