我正在使用time.After(time)
,它工作正常。
我的问题是:它是否准确,我应该使用它还是应该制作自己的功能?我将它与 Raft Consensus 算法实现一起使用。
我想你的意思是时间。之后?
我写了一个快速基准来回答这个问题。
运行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 左右。
这非常依赖于操作系统和硬件,但会因您选择的操作系统和硬件而异。