Go 在围棋程序中测量时间

Go 在围棋程序中测量时间,go,time,Go,Time,在Go中,测量函数周围的时间很容易。 但是如果你需要每秒并行测量5000次呢 我指的是包含关于如何在围棋中测量时间的伟大答案的 使用time.Now()每秒5000次或更多的成本是多少? 虽然它可能依赖于底层OS,但是我们考虑Linux。 时间测量取决于编程语言及其实现、操作系统及其实现、硬件体系结构、实现和速度等。p> 你需要关注事实,而不是猜测。在围棋中,从一些基准开始。比如说, 自测试开始: package main import ( "testing" "time" )

在Go中,测量函数周围的时间很容易。 但是如果你需要每秒并行测量5000次呢

我指的是包含关于如何在围棋中测量时间的伟大答案的

使用time.Now()每秒5000次或更多的成本是多少?
虽然它可能依赖于底层OS,但是我们考虑Linux。

时间测量取决于编程语言及其实现、操作系统及其实现、硬件体系结构、实现和速度等。p> 你需要关注事实,而不是猜测。在围棋中,从一些基准开始。比如说,

自测试开始:

package main

import (
    "testing"
    "time"
)

var now time.Time

func BenchmarkNow(b *testing.B) {
    for N := 0; N < b.N; N++ {
        now = time.Now()
    }
}

var since time.Duration
var start time.Time

func BenchmarkSince(b *testing.B) {
    for N := 0; N < b.N; N++ {
        start = time.Now()
        since = time.Since(start)
    }
}
现在,问问自己每秒5000次是否必要、实用和合理


您的基准测试结果是什么?

然后重新设计,直到可以再次进行测量。如果您没有5000个精确的时钟,则无法同时测量5000个时间跨度。这是一个物理真理,与去无关。您必须找到不同的解决方案,例如抽样、平均或其他统计技巧或牺牲准确性。感谢您的测试脚本<代码>开始测试时间\u test.go-bench=-benchtime=1s
goos:linux
goarch:amd64
BenchmarkNow-8 20000082.0 ns/op
BenchmarkSince-8 10000000 169 ns/op
PASS确定命令行参数3.628s
go version
go version go1.10 linux/amd64这是在K8s群集在GKE上。我真正关心的是,如果我使用普罗米修斯柱状图(记录
time.Duration
)为我的微服务设置仪器,以收集每个请求的值,我将每秒生成一个
time.Now()
然后生成一个
time.Duration().Seconds()
,次数与我有一个请求时数相同。我只是想评估每一次呼叫的成本,以确保我的计量不会遇到微服务的瓶颈:)
$ go test since_test.go -bench=. -benchtime=1s
goos: linux
goarch: amd64
BenchmarkNow-4      30000000            47.5 ns/op
BenchmarkSince-4    20000000            98.1 ns/op
PASS
ok      command-line-arguments  3.536s
$ go version
go version devel +48c4eeeed7 Sun Mar 25 08:33:21 2018 +0000 linux/amd64
$ uname -srvio
Linux 4.13.0-37-generic #42-Ubuntu SMP Wed Mar 7 14:13:23 UTC 2018 x86_64 GNU/Linux
$ cat /proc/cpuinfo | grep 'model name' | uniq
model name  : Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
$