本質(zhì)上,goroutine 就是協(xié)程。 不同的是,Golang 在 runtime、系統(tǒng)調(diào)用等多方面對 goroutine 調(diào)度進(jìn)行了封裝和處理,當(dāng)遇到長時間執(zhí)行或者進(jìn)行系統(tǒng)調(diào)用時。
會主動把當(dāng)前 goroutine 的CPU (P) 轉(zhuǎn)讓出去,讓其他 goroutine 能被調(diào)度并執(zhí)行,也就是 Golang 從語言層面支持了協(xié)程。
Golang 的一大特色就是從語言層面原生支持協(xié)程,在函數(shù)或者方法前面加 go關(guān)鍵字就可創(chuàng)建一個協(xié)程。
其他方面的比較
內(nèi)存消耗方面
每個 goroutine (協(xié)程) 默認(rèn)占用內(nèi)存遠(yuǎn)比 Java 、C 的線程少。
goroutine:2KB
線程:8MB
線程和 goroutine 切換調(diào)度開銷方面
線程/goroutine 切換開銷方面,goroutine 遠(yuǎn)比線程小
線程:涉及模式切換(從用戶態(tài)切換到內(nèi)核態(tài))、16個寄存器、PC、SP...等寄存器的刷新等。
goroutine:只有三個寄存器的值修改 - PC / SP / DX.
我們知道,協(xié)程(coroutine)是Go語言中的輕量級線程實現(xiàn),由Go運行時(runtime)管理。
在一個函數(shù)調(diào)用前加上go關(guān)鍵字,這次調(diào)用就會在一個新的goroutine中并發(fā)執(zhí)行。當(dāng)被調(diào)用的函數(shù)返回時,這個goroutine也自動結(jié)束。需要注意的是,如果這個函數(shù)有返回值,那么這個返回值會被丟棄。
先看一下下面的程序代碼:
func Add(x, y int) { z := x + y fmt.Println(z) } func main() { for i:=0; i<10; i++ { go Add(i, i) } }
執(zhí)行上面的代碼,會發(fā)現(xiàn)屏幕什么也沒打印出來,程序就退出了。
以上就是golang 如何開啟協(xié)程的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!
網(wǎng)站名稱:go語言開啟協(xié)程的方法-創(chuàng)新互聯(lián)
文章路徑:http://chinadenli.net/article46/ioohg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、企業(yè)建站、網(wǎng)站制作、面包屑導(dǎo)航、微信小程序、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容