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