首頁  >  文章  >  後端開發  >  golang 如何開啟協程

golang 如何開啟協程

(*-*)浩
(*-*)浩原創
2019-12-30 15:51:063417瀏覽

golang 如何開啟協程

本質上,goroutine 就是協程。 不同的是,Golang 在 runtime、系統呼叫等多方面對 goroutine 調度進行了封裝和處理,當遇到長時間執行或進行系統呼叫時。 (推薦學習:go

會主動把當前goroutine 的CPU (P) 轉讓出去,讓其他goroutine 能被調度並執行,也就是Golang 從語言層面支持了協程。

Golang 的一大特色就是從語言層面原生支援協程,在函數或方法前面加 go關鍵字就可建立一個協程。

其他方面的比較

 記憶體消耗方面

每個goroutine (協程) 預設佔用記憶體遠比Java 、C 的執行緒少。

goroutine:2KB 

線程:8MB

線程和goroutine 切換調度開銷方面

線程/goroutine 切換開銷方面, goroutine 遠比線程小

線程:涉及模式切換(從用戶態切換到內核狀態)、16個寄存器、PC、SP...等寄存器的刷新等。

goroutine:只有三個暫存器的值修改- PC / SP / DX.

#我們知道,協程(coroutine)是Go語言中的輕量級線程實現,由Go運行時(runtime)管理。

在一個函數呼叫前加上go關鍵字,這次呼叫就會在一個新的goroutine中並發執行。當被呼叫的函數回傳時,這個goroutine也自動結束。 要注意的是,如果這個函數有回傳值,那麼這個回傳值就會被丟棄。

先看一下下面的程式碼:

func Add(x, y int) {
    z := x + y
    fmt.Println(z)
}
func main() {
    for i:=0; i<10; i++ {
        go Add(i, i)
    }
}

執行上面的程式碼,會發現螢幕什麼也沒列印出來,程式就退出了。

以上是golang 如何開啟協程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn