如何管理 Goroutine

爲何須要管理Goroutines

有效利用資源git

雖然在Golang程序中,使用go func的方式開啓一個goroutine協程是很是輕量級的操做。可是,徹底無論理的任意建立,會形成不少資源的浪費。雖然golang自己提供了GC功能,可是GC釋放是須要時機的。經過更加合理的建立goroutine對象能夠更加有效的利用系統資源。github

貼一個常見的資源問題:golang

for {
    go func(){
        fmt.Println("xxx")
    }()
}

這段代碼可能形成兩類對象資源的浪費:函數

  • 函數對象資源的浪費
  • goroutine資源的浪費

以上代碼,讀者能夠長時間運行看看程序對於系統資源的佔用狀況。code

上下文控制協程

隨着程序複雜度的上升,goroutine一般也會隨之增加。如何控制這些新建立的goroutine呢。這就須要經過context.Context上下文對象,進行父子級傳遞,完成父子goroutine的控制。對象

如何實現Goroutine的管理

除了以上兩點緣由以外,參考項目 github.com/x-mod/routine 中。資源

相關文章
相關標籤/搜索