如何管理 Goroutine

2021-09-12 12:34:42 字數 3416 閱讀 7596

有效利用資源

雖然在golang程式中,使用go func的方式開啟乙個goroutine協程是非常輕量級的操作。但是,完全不管理的任意建立,會造成很多資源的浪費。雖然golang本身提供了gc功能,但是gc釋放是需要時機的。通過更加合理的建立goroutine物件可以更加有效的利用系統資源。

貼乙個常見的資源問題:

for ()

}

這段**可能造成兩類物件資源的浪費:

以上**,讀者可以長時間執行看看程式對於系統資源的占用情況。

上下文控制

隨著程式複雜度的上公升,goroutine通常也會隨之增長。如何控制這些新建立的goroutine呢。這就需要通過context.context上下文物件,進行父子級傳遞,完成父子goroutine的控制。

除了以上兩點原因之外,針對goroutine的管理,還可以提供以下功能的擴充套件:

具體的實現已經初步實現在該專案github.com/x-mod/routine中。

如何優雅的控制goroutine的數量

1,為什麼要控制goroutine的數量?goroutine固然好,但是數量太多了,往往會帶來很多麻煩,比如耗盡系統資源導致程式崩潰,或者cpu使用率過高導致系統忙不過來。比如 1 for i 0 i 10000 i 2,用什麼方法控制goroutine的數量?要在每一次執行go之前判斷gorout...

goroutine和執行緒

應用程式的執行必須依託於核心提供的資源,包括cpu資源 儲存資源 i o資源等。為了使上層應用能夠訪問到這些資源,核心必須為上層應用提供訪問的介面 即系統呼叫。因此,如果乙個程式需要從使用者態進入核心態,那麼它必須執行系統呼叫語句。當程式中有系統呼叫語句,程式執行到系統呼叫時,首先使用類似int 8...

goroutine 輕量級執行緒

goroutine是由go執行時環境管理的輕量級執行緒。在乙個包中有乙個函式 goroutine使用 go say 來開啟乙個新的goroutine執行。執行下面的程式,觀察執行結果。package main import time fmt func say s string func main 你...