请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

什么情况用time.Tick(), 什么情况用time.Sleep()的问题,谢谢老师

老师这里使用 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后开始执行

0 回复 有任何疑惑可以回复我~
  • 提问者 慕UI5135293 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-09-10 13:52:32
  • 为什么Sleep10 ms却会等待13ms呢
    回复 有任何疑惑可以回复我~ 2022-07-23 21:48:00
  • ccmouse 回复 Coolcats #3
    Sleep的作用是至少等待10ms。它不保证10ms之后一定唤醒的。
    回复 有任何疑惑可以回复我~ 2022-07-24 21:49:53
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信