【问题标题】:Confused over precision of lua's os.clock对 lua 的 os.clock 精度感到困惑
【发布时间】:2019-11-21 13:20:27
【问题描述】:

我认为 Lua os.clock() 以秒为单位返回时间。但是从https://www.lua.org/pil/22.1.html这里的文档来看,他们有这个例子

local x = os.clock()
local s = 0
for i=1,100000 do s = s + i end
print(string.format("elapsed time: %.2f\n", os.clock() - x))

将结果四舍五入到小数点后 2 位。 os.clock() 是否返回 second.ms

在 Lua 中运行它也会给出

> print(os.clock())
0.024615

这些小数位是多少?

【问题讨论】:

  • 是程序运行的秒数,但不四舍五入到最接近的秒数。它具有毫秒精度
  • @avariant 那么为什么stackoverflow.com/questions/463101/… 上的所有这些帖子都说 Lua 没有毫秒精度,而您需要用 C 或其他方式实现它?似乎 os.clock() 被原生支持并具有 ms 分辨率
  • os.time 和 os.clock 提供不同的功能。 os.time 返回当前时间,并且只有秒精度。 os.clock 返回自您启动(我假设)lua 解释器以来经过的时间。因此,如果您正在对某种延迟进行基准测试或编码,您可以使用 os.clock 来跟踪经过的时间毫秒精度,但它不会为您提供一天中的时间

标签: lua


【解决方案1】:

os.clockos.time 不是同一种时间。

os.time 正在处理“wall-clock time”,即人类使用的时间。

os.clock 是一个计数器报告CPU time。从os.clock 得到的十进制数是 CPU 运行当前任务所花费的秒数。除了使用相同的基本时间单位(秒)外,CPU 时间与挂钟时间没有关联。

【讨论】:

  • 在 Lua 中 os.clock 报告 real time 而不是 cpu time 用于 Windows 系统。对于 Linux 和 OS X,我相信它确实报告了 cpu time
  • @Nifim 不在我的 Windows 系统中。它报告运行时间。
  • @tonypdmtr real-time 从程序的开始如果你正在调试一个断点或者程序由于任何原因停止,程序没有执行的时间仍然计入os.clock , 在 Windows 系统上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2019-09-13
  • 2012-07-22
  • 2013-05-13
相关资源
最近更新 更多