由于 golang 的 timer 是高精度定时器,所以在使用 timer 的时候,需要注意精度与性能的平衡
下面跑几个简单的 demo, 绝对值没有参考意义,主要观察其趋势变化
定时器间隔 (ms) | 1 | 10 | 100 | 1000 |
---|---|---|---|---|
CPU 占用 | 6.6% | 1.8% | 0.2% | 0% |
可以发现,当间隔到了 1ms 的时候,CPU 会占用到 7%, 而间隔到了 1s, 则基本不占用 CPU。这是因为 go 的 timer 是高精度的定时器,相关的 github 讨论如下:https://github.com/golang/go/issues/41699
package main
import (
"time"
)
func main() {
ticker := time.NewTicker(1 * time.Millisecond)
i := 0
for range ticker.C {
i++
}
}
package main
import (
"time"
)
func main() {
ticker := time.NewTicker(10 * time.Millisecond)
i := 0
for range ticker.C {
i++
}
}
package main
import (
"time"
)
func main() {
ticker := time.NewTicker(100 * time.Millisecond)
i := 0
for range ticker.C {
i++
}
}
package main
import (
"time"
)
func main() {
ticker := time.NewTicker(1000 * time.Millisecond)
i := 0
for range ticker.C {
i++
}
}