gpt4 book ai didi

GOMAXPROCS 已经是 2,但程序仍然挂起

转载 作者:IT王子 更新时间:2023-10-29 02:15:33 25 4
gpt4 key购买 nike

我已经设置了 runtime.GOMAXPROCS(2),但是这个程序在输出一些数字时仍然挂起。我可以看到这个程序使用了高 cpu(超过 100%),但我不明白为什么 for 循环 goroutine 会使我的程序无法运行。

go 版本在 linux/amd64 上是 1.4.2,我的电脑有 4 个 CPU。

代码如下:

package main

import "fmt"
import "runtime"
import "time"

func forever() {
for {
}
}

func show() {
for number := 1; number < 999999; number++ {
time.Sleep(1000)
fmt.Println(number)
}
}

func main() {
runtime.GOMAXPROCS(2)
go show()
go forever()
for {
time.Sleep(1000)
}
}

最佳答案

没有必要有一个除了消耗 CPU 时间之外什么都不做的繁忙循环。它不仅会消耗整个 OS 线程,而且 goroutines 是协同调度的,它会干扰运行时的 goroutines。例如,在 Go1.5 上,这通常会阻塞 GC 的 stop-the-world 阶段(您可以通过设置 GOGC=off 来测试)。

要使该程序运行,您可以在 for 循环中插入一个调度点,但最好将其完全删除。

func forever() {
for {
runtime.Gosched()
}
}

关于GOMAXPROCS 已经是 2,但程序仍然挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33524477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com