我正在嘗試在主線程中與無限循環同時運行 goroutine(go 版本 go1.4.1 darwin/amd64),但我無法使其正常工作。如果我理解正確,如果我指定了 GOMAXPROCS,go 應該將 goroutine 安排到其他線程,但它不會。即使我LockOSThread()在 main 中明確寫入,我仍然看不到輸出。如何讓 go 在單獨的操作系統線程中運行 goroutine?package mainimport( "fmt" "time" "runtime")func main() { runtime.GOMAXPROCS(runtime.NumCPU() * 8) go func() { for { time.Sleep(1 * time.Second) fmt.Println("From routine") } }() for {}}
1 回答

ITMISS
TA貢獻1871條經驗 獲得超8個贊
問題是當你輸入for{}
. 調度器只能在 goroutine 被阻塞或調用另一個函數時才能工作,因此在閉環中調度器無法調度。
在 之前添加一個 time.Sleep(time.Millisecond)for{}
它將起作用。
但是,我不知道您這樣做是否只是為了好玩,但是如果您想在 goroutines 工作時永遠等待(或直到其他 gorounties 死鎖或死亡),最好使用select{}
它會阻塞不浪費 CPU 周期。
- 1 回答
- 0 關注
- 199 瀏覽
添加回答
舉報
0/150
提交
取消