Golang學習筆記(8)goroutine 和 channel

第八章 goroutine 和 channel


goroutine

func main() {
	for i := 0; i < 1000; i++ {
		go func(i int) {
			for {
				fmt.Printf("Hello from "+
					"goroutine %d\n", i)
			}
		}(i)
	}
	time.Sleep(time.Minute)
}

協程Coroutine

  • 輕量級“線程”
  • 非搶佔式多任務處理,由協程主動交出控制權
  • 編譯器 / 解釋器 / 虛擬機層面的多任務
  • 多個攜程可能在一個或多個線程上運行

goroutine的定義

  • 任何函數只需要加上go就能送給調度器運行
  • 不需要在定義時區分是否是異步函數
  • 調度器在合適的點進行切換
  • 使用 -race 來檢測數據訪問衝突

goroutine可能的切換點

  • I/O , select
  • channel
  • 等待鎖
  • 函數調用(有時)
  • runtime.Gosched()

channel

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章