for {
time.Sleep(200 * 毫秒)
}
为啥要加个time.Sleep呢, 因为要给cpu休息下, 不然负载会高?
但是有更细致的说法么, 关于负载? sleep时长?
for {
time.Sleep(200 * 毫秒)
}
为啥要加个time.Sleep呢, 因为要给cpu休息下, 不然负载会高?
但是有更细致的说法么, 关于负载? sleep时长?
for {
err := DoSomething()
if err != nil {
continue
}
// do something else
}
如果 DoSomething()
一直失败,就会疯狂调用 DoSomething()
所以会 sleep 一下
for {
sleep(time.Second)
err := DoSomething()
if err != nil {
continue
}
// do something else
}
或
for {
err := DoSomething()
if err != nil {
goto End
}
// do something else
End:
sleep(time.Second)
}
7 回答5.6k 阅读
6 回答7.1k 阅读✓ 已解决
4 回答2.5k 阅读
2 回答1.1k 阅读✓ 已解决
1 回答2.3k 阅读
2 回答1k 阅读
1 回答1.1k 阅读
这个问题要结合具体的场景来看。
如果这段代码是某个教程的代码片段,作者可能有几个目的:①降低 CPU 负载,如果没有 time.Sleep 的调用,这个 for 循环会一直占用一个 cpu 核做无用功,造成资源上的极大浪费;② 说明 goroutine 的一个调度问题,正如第一点所描述的,如果一个 for 选好一直占用 cpu 核做无用功,同时你的电脑只有一个 cpu 核的情况下,那么代码将一直 “卡” 在这个 for 循环里跳不出来,但是加了 time.Sleep 则可以促使 调度器 在一定时间把这个 for 循环所在的线程调度走从而把 cpu 资源让给其他的协程。
sleep 的时间没有固定值,是根据需要设定的,几毫秒几秒几分钟看需求了。