以下代碼在https://play.golang.org/p/X1-jZ2JcbOQpackage mainimport ( "fmt")func p(s string) { fmt.Println(s)}func main() { go fmt.Println("1") go p("2") for {} // infinite loop}使用 golang 1.11 在 Windows 中肯定打印 1 2 但在使用 golang 1.11.4 的 Linux 中絕對不打印任何內容。我能理解前者的行為,但不能理解后者。為什么go程序不是一直運行非主線程?這背后有什么原因嗎?
1 回答

人到中年有點甜
TA貢獻1895條經(jīng)驗 獲得超7個贊
Go Playground 以 GOMAXPROCS=1 運行。在操場上試試這個:
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Println(runtime.GOMAXPROCS(0))
}
當你在本地運行時,你可能會有更高的 GOMAXPROCS 值。
即使在 playground 上,如果通過引入 Sleep [ https://play.golang.org/p/QquMPZSd6kI ]取消調度主 goroutine,你也可以看到打印工作:
func main() {
go fmt.Println("1")
go p("2")
time.Sleep(time.Second)
for {}
}
或者
在開始時更改 GOMAXPROCS:
runtime.GOMAXPROCS(2)
- 1 回答
- 0 關注
- 159 瀏覽
添加回答
舉報
0/150
提交
取消