如何使超时功能变得更好



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

我的问题是:这是精确的吗?我应该使用它还是应该做自己的功能?我正在将其用于筏共识算法实现。

我想你是指时间?

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

使用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。

这是非常依赖的操作系统和硬件,但是您的OS和选择的硬件会有所不同。

相关内容

  • 没有找到相关文章

最新更新