在Go Routines中测量时间

时间:2018-03-26 11:25:33

标签: go time

Go中的测量时间很容易。 但是如果你需要每秒5000次并行测量呢?

我指的是Correctly measure time duration in Go,其中包含有关如何衡量Go时间的很好答案。

使用time.Now()每秒5000次或更多费用是多少? 虽然它可能取决于底层操作系统,但请考虑使用linux。

1 个答案:

答案 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次是否必要,实用且合理。

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