我曾经time.Now().UnixNano()计算代码某些部分的执行时间,但我发现了一件有趣的事情。有时 IO 操作后经过的时间为零!它出什么问题了?代码在Go 1.11中运行,并使用标准库"time"。Redis 库是"github.com/mediocregopher/radix.v2/redis". redis服务器版本是3.2。我在 Windows 上使用 VSCode 编辑器运行它。isGatherTimeStat = falseif rand.Intn(100) < globalConfig.TimeStatProbability { // Here I set TimeStatProbability 100 isGatherTimeStat = true}if isGatherTimeStat { timestampNano = time.Now()}globalLogger.Info("time %d", time.Now().UnixNano())resp := t.redisConn.Cmd("llen", "log_system")globalLogger.Info("time %d", time.Now().UnixNano())if isGatherTimeStat { currentTimeStat.time = time.Since(timestampNano).Nanoseconds() currentTimeStat.name = "redis_llen" globalLogger.Info("redis_llen time sub == %d", currentTimeStat.time) select { case t.chTimeStat <- currentTimeStat: default: }}以下是一些日志:[INFO ][2019-07-31][14:47:53] time 1564555673269444200[INFO ][2019-07-31][14:47:53] time 1564555673269444200[INFO ][2019-07-31][14:47:53] redis_llen time sub == 0[INFO ][2019-07-31][14:47:58] time 1564555678267691700[INFO ][2019-07-31][14:47:58] time 1564555678270689300[INFO ][2019-07-31][14:47:58] redis_llen time sub == 2997600[INFO ][2019-07-31][14:48:03] time 1564555683268195600[INFO ][2019-07-31][14:48:03] time 1564555683268195600[INFO ][2019-07-31][14:48:03] redis_llen time sub == 0[INFO ][2019-07-31][14:48:08] time 1564555688267631100[INFO ][2019-07-31][14:48:08] time 1564555688267631100[INFO ][2019-07-31][14:48:08] redis_llen time sub == 0
2 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
你的代码没有任何问题。在 Windows 上,系统时间通常每隔 10-15 毫秒左右更新一次,这意味着如果您在此期间查询当前时间两次,您将得到相同的值。
您的操作有时会产生t = 2997600ns = 3ms
,这可以解释这一点。归咎于Windows。
繁华开满天机
TA贡献1816条经验 获得超4个赞
time.Now()
Go 1.16 中改进了 Windows 下的分辨率,
计时器分辨率现在应约为 500 纳秒。
测试程序:
package main
import (
"fmt"
"time"
)
func timediff() int64 {
t0 := time.Now().UnixNano()
for {
t := time.Now().UnixNano()
if t != t0 {
return t - t0
}
}
}
func main() {
var ds []int64
for i := 0; i < 10; i++ {
ds = append(ds, timediff())
}
fmt.Printf("%v nanoseconds\n", ds)
}
测试输出:
[527400 39200 8400 528900 17000 16900 8300 506300 9700 34100] nanoseconds
- 2 回答
- 0 关注
- 120 浏览
添加回答
举报
0/150
提交
取消