我正在使用time.After(time)
,这是正常的。
我的问题是:它是否准确,我应该使用它还是应该自己动手?我正在使用Raft Consensus算法实现。
答案 0 :(得分:4)
我认为你的意思是time.After?
我写了一个快速基准来回答这个问题。
使用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左右。
这非常依赖操作系统和硬件,但是在您选择的操作系统和硬件方面会有所不同。