0

我正在使用time.After(time),它工作正常。

我的问题是:它是否准确,我应该使用它还是应该制作自己的功能?我将它与 Raft Consensus 算法实现一起使用。

4

1 回答 1

4

我想你的意思是时间。之后

我写了一个快速基准来回答这个问题。

运行go test -run XXX -bench . time_after_test.go

package main

import (
    "testing"
    "time"
)

func BenchmarkTimeAfterSecond(b *testing.B) {
    for i := 0; i < b.N; i++ {
        <-time.After(time.Second)
    }
}

func BenchmarkTimeAfterMillisecond(b *testing.B) {
    for i := 0; i < b.N; i++ {
        <-time.After(time.Millisecond)
    }
}

func BenchmarkTimeAfterMicrosecond(b *testing.B) {
    for i := 0; i < b.N; i++ {
        <-time.After(time.Microsecond)
    }
}

func BenchmarkTimeAfterNanosecond(b *testing.B) {
    for i := 0; i < b.N; i++ {
        <-time.After(time.Nanosecond)
    }
}

这在 linux amd64 机器上的 go1.2 下给出了这个

BenchmarkTimeAfterSecond                   1    1000132210 ns/op
BenchmarkTimeAfterMillisecond           2000       1106763 ns/op
BenchmarkTimeAfterMicrosecond          50000         62649 ns/op
BenchmarkTimeAfterNanosecond         5000000           493 ns/op

所以答案在我的机器上精确到 0.1-0.2 mS 左右。

这非常依赖于操作系统和硬件,但会因您选择的操作系统和硬件而异。

于 2014-03-08T09:02:10.973 回答