亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

sync.WaitGroup怎么在Golang中使用

發布時間:2021-01-20 16:00:51 來源:億速云 閱讀:146 作者:Leah 欄目:編程語言

本篇文章為大家展示了sync.WaitGroup怎么在Golang中使用,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

WaitGroup的用途:它能夠一直等到所有的goroutine執行完成,并且阻塞主線程的執行,直到所有的goroutine執行完成。

官方對它的說明如下:

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個方法,Add(),Done(),Wait()。

其中Done()是Add(-1)的別名。簡單的來說,使用Add()添加計數,Done()減掉一個計數,計數不為0, 阻塞Wait()的運行。

 
例子代碼如下:

同時開三個協程去請求網頁, 等三個請求都完成后才繼續 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發送 1千萬次,并接受1千萬次的性能。

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()

}

上述內容就是sync.WaitGroup怎么在Golang中使用,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淮安市| 青龙| 鄂托克前旗| 酒泉市| 那坡县| 宝清县| 开封市| 镇远县| 巴楚县| 鄂托克前旗| 岳阳县| 蒙阴县| 织金县| 阳江市| 平潭县| 报价| 宜兰市| 贺州市| 将乐县| 门头沟区| 临漳县| 海原县| 惠安县| 昭通市| 诸暨市| 沅陵县| 涿鹿县| 龙岩市| 天峻县| 新昌县| 青州市| 兴山县| 永川市| 什邡市| 古蔺县| 都江堰市| 靖远县| 闻喜县| 财经| 图片| 宁河县|