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

来源:16-3 并发调度器

慕UI5135293

2020-09-03

老师这里使用 var rateLimiter = time.Tick(10 * time.Millisecond)

想问下它和 直接用 time.Sleep() 有什么区别?比如:性能上有优势?不清楚为什么这里要用time.Tick().

我感觉用time.Sleep()好像更直接一些

写回答

1回答

ccmouse

2020-09-03

他们的用途不同,不是出于性能考虑。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
3
ccmouse
回复
Coolcats
Sleep的作用是至少等待10ms。它不保证10ms之后一定唤醒的。
2022-07-24
共3条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程