golang在写死循环的时候, 总是要加上一个time.Sleep 为啥

for {
    time.Sleep(200 * 毫秒)
}

为啥要加个time.Sleep呢, 因为要给cpu休息下, 不然负载会高?
但是有更细致的说法么, 关于负载? sleep时长?

阅读 2.4k
评论
    2 个回答

    这个问题要结合具体的场景来看。

    如果这段代码是某个教程的代码片段,作者可能有几个目的:①降低 CPU 负载,如果没有 time.Sleep 的调用,这个 for 循环会一直占用一个 cpu 核做无用功,造成资源上的极大浪费;② 说明 goroutine 的一个调度问题,正如第一点所描述的,如果一个 for 选好一直占用 cpu 核做无用功,同时你的电脑只有一个 cpu 核的情况下,那么代码将一直 “卡” 在这个 for 循环里跳不出来,但是加了 time.Sleep 则可以促使 调度器 在一定时间把这个 for 循环所在的线程调度走从而把 cpu 资源让给其他的协程。

    sleep 的时间没有固定值,是根据需要设定的,几毫秒几秒几分钟看需求了。

      • 2.3k

      这段代码有什么用?
      要是for循环中有select+通道 这种模式作为主循环还比较常见

        撰写回答

        登录后参与交流、获取后续更新提醒