我正在为crystal编写一个小型基准测试,希望在没有任何其他库的情况下比较所花费的时间。
在像ruby这样的编程语言中,我会这样做:
t = Time.new
sleep 3
puts "Time: #{Time.new - t}s"
有没有一种方法可以获得当前的单调时钟时间,并将其从另一个时间中减去,以获得至少小数点后3位的精度?
操作系统提供的典型时间表示为基于";挂钟;时钟可能会发生变化同步。这可能导致时间线使其不适合精确测量经过的时间时间
作为替代方案,操作系统还提供单调时钟它的时间线没有明确的起点,但严格来说线性增加。
此单调时钟应始终用于测量经过的时间。
可以使用
.monotonic
:读取该时钟t1 = Time.monotonic # operation that takes 1 minute t2 = Time.monotonic t2 - t1 # => 1.minute (approximately)
块的执行时间可以使用
.measure
:来测量elapsed_time = Time.measure do # operation that takes 20 milliseconds end elapsed_time # => 20.milliseconds (approximately)
--时间-github.com/crystal-lang/crystal
*强调矿。
所以你的例子基本上是一样的,只是用了Time.monotonic
而不是Time.new
。