Использование Time.now
(который возвращает стенной часы время), поскольку базовые линии имеют пару проблем, которые могут привести к неожиданному поведению. Это вызвано тем фактом, что время настенного тока может быть изменено, например, вставленные прыжки-секунды или time slewing, чтобы настроить местное время на контрольное время.
Если есть, например, вторая секунда, вставленная во время измерения, будет отключена на секунду. Точно так же, в зависимости от локальных системных условий, вам, возможно, придется иметь дело с дневным временем, быстрыми или медленными работающими часами или часами, даже прыгающими назад во времени, что приводит к отрицательной продолжительности и многим другим проблемам.
Решение этой проблемы заключается в использовании разного времени работы часов: монотонных часов. Этот тип часов имеет разные свойства, чем настенные часы. Он увеличивается монотонно, т. Е. Никогда не возвращается и увеличивается с постоянной скоростью. При этом он не представляет собой настенные часы (т. Е. Время, которое вы читаете с часов на стене), но временную метку, которую вы можете сравнить с более поздней меткой времени, чтобы получить разницу.
В Ruby, вы можете использовать такую временную метку с Process.clock_gettime(Process::CLOCK_MONOTONIC)
нравится следующим образом:
t1 = Process.clock_gettime(Process::CLOCK_MONOTONIC)
# => 63988.576809828
sleep 1.5 # do some work
t2 = Process.clock_gettime(Process::CLOCK_MONOTONIC)
# => 63990.08359163
delta = t2 - t1
# => 1.5067818019961123
delta_in_milliseconds = delta * 1000
# => 1506.7818019961123
Метод Process.clock_gettime
возвращает метку времени как поплавок с долей секунды. Возвращаемое фактическое число не имеет определенного значения (на которое вы должны положиться). Тем не менее, вы можете быть уверены, что следующий вызов вернет большее число, и, сравнив значения, вы можете получить разницу в реальном времени.
Эти атрибуты делают метод основным кандидатом для измерения разницы во времени, не видя, что ваша программа завершилась неудачей в наименее подходящее время (например, в полночь в канун Нового года, когда вставлена другая вставка).
Время отливки для поплавков здесь не нужно. –