我正在使用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和选择的硬件会有所不同。