最近練習使用ticker ,希望每隔一段時間(ex 30s)就執行doSomeThing()一次,
而發現當程式啟動後,第一次執行也是需要等待30s,
但目標是希望一開始馬上執行一次再隔三十秒執行第二次下去.
而時間有可能會細到500ms就去問一次.
以下是我改過之後的程式部分內容:
fun main(){
...
timeC:=make(chan time.Time,10)
go doSomeThing(timeC)
ticker := time.NewTicker(rate) //rate是30s
timeC<-time.Now() //執行第一次
go func() {
for tick := range ticker.C { //每隔三十秒
timeC <- tick
}
}()
defer ticker.Stop()
//收到signal才退出
}
func doSomeThing(timeC chan time.Time){
for t := range timeC.C {
...[long time thing, eg:http request & save to db]
}
}
1.看起來好像有達到我的預期效果,但擔心這樣改是否會有沒有考慮到的陷阱?
2.會不會有時間精確性方面的問題,如果要評估效能,也會在不同性能電腦上執行,
是否有什麼工具可以協助判斷?
想跟各位高手請教一下,謝謝
11.28 11am更正:使用time.Now()去執行第一次
您的代码似乎按预期工作,但您需要考虑一些事项:
使用通道传输时间可能会导致与同步和并发相关的问题。 您需要确保使用该通道不会导致不必要的等待或数据冲突。
至于计时精度的问题,可以使用Go中的time包等性能测量工具来测量程序在不同性能的计算机上的执行时间。 您还可以使用 pprof time calculator 等外部工具来分析 Go 程序的性能。
如果您想确保您的程序在不同性能的计算机上正确有效地运行,您可能需要在各种环境中执行测试和测量性能。