Go語言學習之goroutine

協程Coroutine

特色函數

  • 輕量級的「線程」
  • 非搶佔式多任務處理,由協程主動交出控制權
  • 編譯器/解釋器/虛擬機層面的多任務,非操做系統
  • 多個協程能夠在一個或多個線程上執行

go關鍵字開啓一個協程操作系統

func main() {
    for i := 0; i < 10; i++ {
        go func(i int) {
            for {
                fmt.Println(i)
            }
        }(i)
    }
    time.Sleep(time.Millisecond)
}

goroutine可能的切換點(轉讓控制權)線程

  • I/O,select
  • channel
  • 等待鎖
  • 函數調用(有時)
  • routime.Goshed()
  • 只是參考,不能保證切換,不能保證在其餘地方不切換
相關文章
相關標籤/搜索