什么情况用time.Tick(), 什么情况用time.Sleep()的问题,谢谢老师
来源:16-3 并发调度器

慕UI5135293
2020-09-03
老师这里使用 var rateLimiter = time.Tick(10 * time.Millisecond)
想问下它和 直接用 time.Sleep() 有什么区别?比如:性能上有优势?不清楚为什么这里要用time.Tick().
我感觉用time.Sleep()好像更直接一些
写回答
1回答
-
他们的用途不同,不是出于性能考虑。sleep是卡在Sleep这一行等待,而Tick返回一个channel,然后立刻继续运行下去。只有当<-rateLimiter的时候,才会卡住并且等待。
关于这里的例子,为啥不是每个请求之前去Sleep,这是我们想精确控制时间:
// 一些操作,花了3~5ms
time.Sleep(10*time.Millisecond)
// 这行将在13ms~15ms开始执行
而使用Tick:
var rateLimiter = time.Tick(10 * time.Millisecond)
// 一些操作,花了3~5ms
<-rateLimiter
// 这行总是将在10ms后开始执行
032022-07-24
相似问题