dee*_*on1 -1 loops scheduling background-process go
在我学习 Go 时,我最初使用一个空的 for 循环编写了我的短程序,以阻止程序退出,因为我使用 go 关键字运行了我的测试函数。然而,随着我的测试/学习程序越来越大,整个程序有时会在随机位置冻结,调试器会断开连接,使调试变得非常困难。
我最终从 IRC 上的一些讨论中了解到原因是空的 for 循环,并将其替换为阻塞通道,但除了与 Go 处理调度的方式有关之外,我从未了解原因。
后台是什么机制导致独立的 go-routines 锁定整个程序,即使有很多内核分配给程序,如果有一个空的无限循环?
空的 for 循环不会阻塞。它使 CPU 忙于一遍又一遍地执行相同的 JMP 指令。您应该也听说过您的 CPU 风扇旋转得相当快。
无限期阻塞的最简单方法是一个空的 select 语句:
select {}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
422 次 |
最近记录: |