iT邦幫忙

0

[golang]使用定時器time.NewTicker與效能測試

最近練習使用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()去執行第一次

就直接執行一個 func() , 就是你想做的部分啊.
func() 再被 你的迴圈呼叫啊.
nagiMemo iT邦新手 5 級 ‧ 2020-11-29 11:26:31 檢舉
對耶! 被要放chan time.Time進去而沒想到...我在鬼打牆..,謝謝

尚未有邦友回答

立即登入回答