本篇文章為大家展示了sync.WaitGroup怎么在Golang中使用,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
為貴定等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及貴定網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、貴定網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
WaitGroup的用途:它能夠一直等到所有的goroutine執(zhí)行完成,并且阻塞主線程的執(zhí)行,直到所有的goroutine執(zhí)行完成。
官方對(duì)它的說(shuō)明如下:
A WaitGroup waits for a collection of goroutines to finish. The main goroutine calls Add to set the number of goroutines to wait for. Then each of the goroutines runs and calls Done when finished. At the same time, Wait can be used to block until all goroutines have finished.
sync.WaitGroup只有3個(gè)方法,Add(),Done(),Wait()。
其中Done()是Add(-1)的別名。簡(jiǎn)單的來(lái)說(shuō),使用Add()添加計(jì)數(shù),Done()減掉一個(gè)計(jì)數(shù),計(jì)數(shù)不為0, 阻塞Wait()的運(yùn)行。
例子代碼如下:
同時(shí)開(kāi)三個(gè)協(xié)程去請(qǐng)求網(wǎng)頁(yè), 等三個(gè)請(qǐ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()
或者下面的測(cè)試代碼
用于測(cè)試 給chan發(fā)送 1千萬(wàn)次,并接受1千萬(wàn)次的性能。
package main import ( "fmt" "sync" "time" ) const ( num = 10000000 ) func main() { TestFunc("testchan", TestChan) } func TestFunc(name string, f func()) { st := time.Now().UnixNano() f() fmt.Printf("task %s cost %d \r\n", name, (time.Now().UnixNano()-st)/int64(time.Millisecond)) } func TestChan() { var wg sync.WaitGroup c := make(chan string) wg.Add(1) go func() { for _ = range c { } wg.Done() }() for i := 0; i < num; i++ { c <- "123" } close(c) wg.Wait() }
上述內(nèi)容就是sync.WaitGroup怎么在Golang中使用,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。