Linux (AMD64) の場合、go はclock_gettime
with を使用しCLOCK_REALTIME
ます。time·now
実装を参照してください。
時間が戻らない単調時計 (CLOCK_MONOTONIC
または) が必要です。CLOCK_MONOTONIC_RAW
Linux では、man ページは、CLOCK_MONOTONIC
飛躍しないことを保証しないことを明示的に示しています。
このクロックは、システム時間の不連続なジャンプ (たとえば、システム管理者が手動でクロックを変更した場合) の影響を受けませんが、adjtime(3) および NTP によって実行される増分調整の影響を受けます。
したがって、Linux では、おそらく最適な選択はCLOCK_MONOTONIC_RAW
. そのために、@MatrixFrog で言及されているクロック パッケージ を使用できます
。例:
import (
"fmt"
"github.com/davecheney/junk/clock"
"time"
)
func main() {
start := clock.Monotonic.Now()
// work
end := clock.Monotonic.Now()
duration := end.Sub(start)
fmt.Println("Elapsed:", duration)
}
参考文献: