Go中的测量时间很容易。 但是如果你需要每秒5000次并行测量呢?
我指的是Correctly measure time duration in Go,其中包含有关如何衡量Go时间的很好答案。
使用time.Now()每秒5000次或更多费用是多少? 虽然它可能取决于底层操作系统,但请考虑使用linux。
答案 0 :(得分:1)
时间测量取决于编程语言及其实现,操作系统及其实现,硬件架构,实现和速度等。
你需要关注事实,而不是猜测。在Go中,从一些基准开始。例如,
since_test.go
:
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)
}
}
输出:
$ 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
$
现在,问问自己每秒5000次是否必要,实用且合理。
您的基准测试结果是什么?