golang中的WaitGroup
生活随笔
收集整理的這篇文章主要介紹了
golang中的WaitGroup
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
簡介
不要把增加其計(jì)數(shù)器值的操作和調(diào)用其Wait方法的代碼,放在不同的 goroutine 中執(zhí)行。換句話說,要杜絕對同一個WaitGroup值的兩種操作的并發(fā)執(zhí)行
WaitGroup的用途:它能夠一直等到所有的goroutine執(zhí)行完成,并且阻塞主線程的執(zhí)行,直到所有的goroutine執(zhí)行完成。
sync.WaitGroup只有3個方法,Add(),Done(),Wait()。
其中Done()是Add(-1)的別名。簡單的來說,使用Add()添加計(jì)數(shù),Done()減掉一個計(jì)數(shù),計(jì)數(shù)不為0, 阻塞Wait()的運(yùn)行。
也可以通過這種方式創(chuàng)建
wg := new(sync.WaitGroup)-
Add 用來添加 goroutine 的個數(shù)
-
Done 執(zhí)行一次數(shù)量減 1
-
Wait 用來等待結(jié)束
例子
同時開三個協(xié)程去請求網(wǎng)頁, 等三個請求都完成后才繼續(xù) Wait 之后的工作
var wg sync.WaitGroup var urls = []string{"http://www.golang.org/","http://www.google.com/","http://www.somestupidname.com/", } for _, url := range urls {// Increment the WaitGroup counter. wg.Add(1)// Launch a goroutine to fetch the URL. go func(url string) {// Decrement the counter when the goroutine completes. defer wg.Done()// Fetch the URL. http.Get(url)}(url) } // Wait for all HTTP fetches to complete. wg.Wait()或者下面的代碼
用于測試 給chan發(fā)送 1千萬次,并接受1千萬次的性能
總結(jié)
以上是生活随笔為你收集整理的golang中的WaitGroup的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang中的执行规则
- 下一篇: golang中的定时器