GOMAXPROCS 设置为 2,但程序停止
当尝试运行设置了 runtime.GOMAXPROCS(2) 的程序时,用户可能会遇到尽管 CPU 利用率很高,但仍出现意外挂起。发生这种情况是由于 goroutine 中的无限循环表示为forever()。
该循环消耗整个操作系统线程而不执行任何有用的工作,从而干扰运行时的 goroutine。特别是在 Go1.5 中,它会阻塞垃圾收集器的 stop-the-world 阶段。
要解决这个问题,可以在 forever() 循环中引入一个调度点:
func forever() { for { runtime.Gosched() } }
但是,完全消除繁忙循环通常会更有效,确保程序顺利执行。
以上是尽管 CPU 使用率很高,为什么我的 Go 程序会因为 GOMAXPROCS(2) 设置而停止?的详细内容。更多信息请关注PHP中文网其他相关文章!