2014-10-17 41 views
1

我正在使用go 1.3.3。 我在我的Mac上運行下面的圍棋程序是10.9.2英特爾酷睿i7:Go程序爲每個goroutine創建操作系統線程,即使沒有系統調用

package main 
import (
     "fmt" 
     "sync" 
) 

func justprint(i int, wg *sync.WaitGroup) { 
    for j := 0; j < 1000000; j++ { 
      fmt.Printf("Printing %d\n", i) 
    } 
    wg.Done() 
} 

func main() { 
    var wg sync.WaitGroup 
    for i := 0; i < 5; i++ { 
      wg.Add(1) 
      go justprint(i, &wg) 
    } 
    wg.Wait() 
    fmt.Println("Done!!") 
} 

活動監視器中我看到,如果我運行這個程序正在催生了8個線程。在goroutine的justprint()中沒有系統調用,所以當我運行這個程序而不是任何去程序創建的默認線程時,我希望沒有創建額外的線程。但隨着我增加去例行調用的次數,OS線程也相應地增加。任何人都可以請幫我理解爲什麼會發生這種情況?

+1

@CharlieTumahai Nah,打印到標準輸出當然使用特殊的'out'和'outs'指令! – fuz 2014-10-17 08:33:40

+0

你是對的...我沒有意識到。非常感謝你清除那個。 – Bharat 2014-10-17 08:37:34

回答

0

你確定它是每個goroutine創建一個線程?嘗試將goroutine的數量增加到1000.我敢打賭,線程的數量保持不變。 Go創建並管理多個線程來處理異步I/O。

相關問題