Go語言的併發簡單總結

2021-10-04 04:16:19 字數 808 閱讀 2365

goexit結束當前goroutine,會呼叫defer, 不會產生panic

1.6.扇入扇出 fan in\fan out

1.7 通知退出機制

通知退出機制是學習使用context庫的基礎

lable:

for}

2.併發正規化

2.1 生成器

2.2 管道

輸入輸出都是chan的時候,鏈式呼叫

2.3 每個請求乙個goroutine

使用waitgroup同步處理過程,結束後統一處理結果,結果處理完使用close通道告訴後面range通道結束獲取到完整結果。

工作通道讀出來就go走,讀到多少個資料就建立多少個協程,容易**。

可以控制最大數量,弄乙個有緩衝的channel,新建乙個協程寫入乙個,表示占空,處理完再讀出來,表示用完了挪開。問題是協程會一直建立銷毀。

2.4 固定worker工作池

分出n個協程來一起讀通道,讀到就操作,操作完了再讀。工作池是固定的,沒有資料時就會有n個占用的通道等待讀取。

2.5 future模式

乙個流程需要多個子呼叫,且這些子呼叫相互沒有依賴。

新建乙個協程用來讀取任務、處理任務並返回任務,主線只需要把任務放進去,在需要的時候讀取出來,不影響總進度。也是佔坑方式。

3.context

設計目的:

1.退出通知機制 主要目的

2.傳遞資料 額外功能,因為傳遞的都是inte***ce{},編譯器不能進行嚴格的型別校驗。

應該傳遞的訊息:

日誌資訊、除錯資訊、不影響業務的可選資料。

go總結 併發

主要學習了菜鳥程式設計 go 併發 總結 go func 可以起乙個執行緒,輕量級的執行緒,執行緒之間採用chan進行傳值。package main import fmt func sum s int c chan int c sum 把 sum 傳送到通道 c func main 緩衝區大小為2 ...

Go語言併發

協程 本質上是一種使用者態執行緒,不需要作業系統來進行搶占式排程,且在真正的實現重寄存於執行緒中,因此,系統開銷極小,可以有效提高執行緒的任務併發性,從而避免多執行緒的缺點。使用協程的優點是程式設計簡單,結構清晰 缺點是需要語言的支援。協程最大優勢 輕量級 可以輕鬆建立上百萬個而不會導致系統資源衰竭...

Go之簡單併發

func calculate id int 使用go來實現併發 func main time.sleep 1e9 2 等待程式執行結束,避免無輸出 上面 是最基礎的併發,使用time.sleep做超時等待,將上面的超時等待換成sync.waitgroup func main i wg.wait wa...