我使用的是 time.After(time)
,它工作正常。
我的问题是:它是否精确,我应该使用它还是应该制作自己的函数?我将其与 Raft 共识算法实现一起使用。
最佳答案
我猜你是说 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 毫秒左右。
这在很大程度上取决于操作系统和硬件,因此会因您选择的操作系统和硬件而异。
关于go - 如何制作更好的超时功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266401/