我想每秒打印N
行。
for i := 0; i < N; i++ {
fmt.Println(getLogs())
time.Sleep(1000000000/N * time.Nanosecond)
}
但似乎fmt.Println()
和getLogs()
也会耗费时间。所以实际上打印N
行会花费超过1秒。
说getLogs()
和fmt.Println()
都需要花费1毫秒。我想每秒打印100万行。因此,打印1行将花费1毫秒到getLogs()
,1毫秒打印,1毫秒睡眠...打印N行将耗费3秒。
更准确地实现这一目标的更好的解决方案?
答案 0 :(得分:5)
您可以使用time.NewTicker
(尝试The Go Playground):
package main
import (
"fmt"
"time"
)
func main() {
const N = 4
ticker := time.NewTicker(1000000000 / N * time.Nanosecond)
for i := 0; i < N; i++ {
fmt.Println(getLogs(i))
<-ticker.C
}
ticker.Stop()
}
func getLogs(i int) int {
time.Sleep(1 * time.Millisecond)
return i
}
输出:
0
1
2
3
请参阅func NewTicker(d Duration) *Ticker
文档:
NewTicker
会返回一个新的Ticker
,其中包含将发送的频道 具有duration参数指定的句点的时间。它调整了 间隔或下降滴答以弥补慢速接收器。持续时间d 必须大于零;如果没有,NewTicker
将会恐慌。停止 自动收报机以释放相关资源。
答案 1 :(得分:0)
您可以使用time.Ticker
之类的内容
for range time.Tick(time.Duration(1000000000/N) * time.Nanosecond){
fmt.Println(getLogs())
if cond {
break
}
}