采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师这里使用 var rateLimiter = time.Tick(10 * time.Millisecond)
想问下它和 直接用 time.Sleep() 有什么区别?比如:性能上有优势?不清楚为什么这里要用time.Tick().
我感觉用time.Sleep()好像更直接一些
他们的用途不同,不是出于性能考虑。sleep是卡在Sleep这一行等待,而Tick返回一个channel,然后立刻继续运行下去。只有当<-rateLimiter的时候,才会卡住并且等待。
关于这里的例子,为啥不是每个请求之前去Sleep,这是我们想精确控制时间:
// 一些操作,花了3~5mstime.Sleep(10*time.Millisecond)// 这行将在13ms~15ms开始执行
// 一些操作,花了3~5ms
time.Sleep(10*time.Millisecond)
// 这行将在13ms~15ms开始执行
而使用Tick:
var rateLimiter = time.Tick(10 * time.Millisecond)// 一些操作,花了3~5ms<-rateLimiter// 这行总是将在10ms后开始执行
var rateLimiter = time.Tick(10 * time.Millisecond)
// 一些操作,花了3~5ms
<-rateLimiter
// 这行总是将在10ms后开始执行
非常感谢!
为什么Sleep10 ms却会等待13ms呢
Sleep的作用是至少等待10ms。它不保证10ms之后一定唤醒的。
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
3.8k 14
750 1
2.1k 1
1.2k 12