我已經設置了runtime.GOMAXPROCS(2),但是這個程序在輸出一些數字時仍然掛起。我可以看到這個程序使用的高CPU(超過100%),但我不明白爲什麼for循環goroutine可以使我的程序無法正常工作。GOMAXPROCS已經是2,但程序仍然掛起
在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)
}
}
是否time.Sleep()不阻止並重新安排? – captncraig
我期望永遠消耗一個操作系統線程,主要和顯示將爭取剩下的一個。也許事實上並非如此? – captncraig
@ captncraig:time.Sleep是一個調度點,但如果睡眠太短,Gosched效率會更高,因爲它更少。 – JimB