這期內容當中小編將會給大家帶來有關如何理解Go并發中的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創新互聯于2013年成立,是專業互聯網技術服務公司,擁有項目網站設計、網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元江城做網站,已為上家服務,為江城各地企業和個人服務,聯系電話:13518219792
Go并發中WaitGroup的使用介紹。
對于Go的并發編程來說,主協程需要知道其他的協程何時結束。通常我們的做法是采用channel的方式來控制,這種做法很好,可以參見我的另外一個帖子(Go并發之channel篇:https://mp.weixin.qq.com/s/PIb-gGBootc6581pHhi5ew)。但是對于一些簡單的協程控制來說,channel顯得有些大材小用,而WaitGroup就可以派上用場了。
WaitGroup是Go pkg中sync 包里的內容:https://golang.org/pkg/sync/,一個 WaitGroup 會等待一系列 goroutine 直到它們全部運行完畢為止。主 goroutine 通過調用 Add 方法來設置需要等待的 goroutine 數量, 而每個運行的 goroutine 則在它們運行完畢時調用 Done 方法。與此同時, 調用 Wait 方法可以阻塞直到所有 goroutine 都運行完畢為止。
1.主協程對其他協程什么都不處理的例子:
通過上面的輸出可以看出,主協程并沒有等待其他協程的結束,就自己退出了,所以看不到關于其他協程的任何打印。
2.主協程通過超時機制來等待其他協程結束的例子:
在主協程中新加了超時1s來等待其他協程的結束,通過打印可以看出來,其他協程已經運行并結束。
3.使用wg的例子:
通過打印信息可以看到,主協程通過wg.Wait()來判斷計數器有沒有變為0,來判斷其他的協程有沒有結束,在主協程檢測到wg的計數器變為0之后,便知道其他協程都已經結束了。
1. (*WaitGroup) Add 方法
func(wg*WaitGroup)Add(delta int)
delta可以為正數,也可以為負數,在wg對應的計數器沒有變為0之前delta可以為負數,但是切記不要讓wg計數器變為負數,因為一旦變為負數,便會panic。
通常Add在協程啟動之前使用。
2. (*WaitGroup) Done 方法
func(wg*WaitGroup)Done()
對wg計數器進行減1操作。
通常Done在協程執行結束的時候使用。
3.(*WaitGroup) Wait 方法
func(wg*WaitGroup)Wait()
阻塞直至 WaitGroup 計數器的值為 0 。
通常在主協程中使用,用來等待其他的協程結束。
上述就是小編為大家分享的如何理解Go并發中的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創新互聯行業資訊頻道。
網站題目:如何理解Go并發中的
轉載來源:http://vcdvsql.cn/article2/pcdcoc.html
成都網站建設公司_創新互聯,為您提供網站制作、面包屑導航、軟件開發、外貿建站、品牌網站建設、手機網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯