Utilizzando Time.now
(che restituisce l'orologio a muro tempo) come base-linee ha un paio di problemi che possono risultare in un comportamento imprevisto. Ciò è causato dal fatto che l'ora del wallclock è soggetta a modifiche come i secondi intercalati inseriti o time slewing per regolare l'ora locale a un orario di riferimento.
Se c'è, ad es. un secondo intercalare inserito durante la misurazione, sarà spento di un secondo. Allo stesso modo, a seconda delle condizioni del sistema locale, potrebbe essere necessario gestire l'ora legale, gli orologi più veloci o più lenti o l'orologio tornare indietro nel tempo, causando una durata negativa e molti altri problemi.
Una soluzione a questo problema consiste nell'utilizzare un orario diverso: un orologio monotono. Questo tipo di orologio ha proprietà diverse rispetto all'orologio da parete. Aumenta monitonicamente, cioè non torna mai indietro e aumenta ad una velocità costante. Con ciò, non rappresenta il wall-clock (cioè la volta che leggi da un orologio sul muro) ma un timestamp che puoi confrontare con un timestamp successivo per ottenere una differenza.
In Ruby, è possibile utilizzare tale timestamp con Process.clock_gettime(Process::CLOCK_MONOTONIC)
piace segue:
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
Il metodo Process.clock_gettime
restituisce un timestamp come un galleggiante con frazioni di secondo. Il numero effettivo restituito non ha un significato definito (su cui dovresti fare affidamento). Tuttavia, puoi essere sicuro che la prossima chiamata restituirà un numero maggiore e confrontando i valori, puoi ottenere la differenza in tempo reale.
Questi attributi rendono il metodo un candidato ideale per misurare le differenze di tempo senza vedere il programma fallire nei tempi meno opportuni (ad esempio a mezzanotte a Capodanno quando è inserito un altro secondo intercalare).
fonte
2017-08-03 11:41:45
I tempi di lancio dei galleggianti qui non sono necessari. –