Lua微秒休眠
Lua microseconds sleep
好的,我需要在 lua 脚本中等待(例如)10 us。有什么办法吗?
现在我使用这个简单的(非忙等待)函数 socket
:
function my_utils.sleep(sec)
socket.select(nil, nil, sec)
end
但它的 "sleep minimum" 似乎是毫秒。
示例 1:
for x=0,2*math.pi,0.008 do
misc.printus()
misc.sleep(0.001)
end
输出:
0.022654
0.023654
0.024654
0.025654
0.026654
0.027654
0.028654
0.029654
0.030654
0.031654
0.032654
...
不错!
示例 2:
for x=0,2*math.pi,0.008 do
misc.printus()
misc.sleep(0.0001)
end
输出:
0.537089
0.537089
0.537089
0.537089
... --(lots of)
38089
0.538089
0.538089
0.538089
0.538089
0.538089
0.538089
... --(lots of)
0.538089
0.577091 -- (jumps over 0.04 second!)
0.577091
0.577091
0.577091
0.577091
... --(and so on)
谁能给我一些解释(以及大约 0.04 秒的跳跃)?
Lua使用操作系统提供的时间服务。可用分辨率通常不是很高,它被视为 Lua 级别的时间跳跃。
想象一下具有分钟分辨率的挂钟。它不能用于测量毫秒间隔。
除了操作系统时间的抖动之外,lua 使用垃圾收集器来管理其内存,这将 运行 定期进行。当它 运行s 时,所有其他操作都会延迟(尽管延迟应该很短)。根据您程序中的分配量,您的代码很可能会因此类 GC 暂停而跳闸。
好的,我需要在 lua 脚本中等待(例如)10 us。有什么办法吗?
现在我使用这个简单的(非忙等待)函数 socket
:
function my_utils.sleep(sec)
socket.select(nil, nil, sec)
end
但它的 "sleep minimum" 似乎是毫秒。
示例 1:
for x=0,2*math.pi,0.008 do
misc.printus()
misc.sleep(0.001)
end
输出:
0.022654
0.023654
0.024654
0.025654
0.026654
0.027654
0.028654
0.029654
0.030654
0.031654
0.032654
...
不错!
示例 2:
for x=0,2*math.pi,0.008 do
misc.printus()
misc.sleep(0.0001)
end
输出:
0.537089
0.537089
0.537089
0.537089
... --(lots of)
38089
0.538089
0.538089
0.538089
0.538089
0.538089
0.538089
... --(lots of)
0.538089
0.577091 -- (jumps over 0.04 second!)
0.577091
0.577091
0.577091
0.577091
... --(and so on)
谁能给我一些解释(以及大约 0.04 秒的跳跃)?
Lua使用操作系统提供的时间服务。可用分辨率通常不是很高,它被视为 Lua 级别的时间跳跃。
想象一下具有分钟分辨率的挂钟。它不能用于测量毫秒间隔。
除了操作系统时间的抖动之外,lua 使用垃圾收集器来管理其内存,这将 运行 定期进行。当它 运行s 时,所有其他操作都会延迟(尽管延迟应该很短)。根据您程序中的分配量,您的代码很可能会因此类 GC 暂停而跳闸。