时间:2021-05-22
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://plete. wg.Wait()或者下面的测试代码
用于测试 给chan发送 1千万次,并接受1千万次的性能。
package mainimport ( "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()}声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
goroutine似乎不用解释太多,可以利用它实现多线程,也可以利用它来实现异步事件。在使用关键字go的过程中,常常会将用到sync.WaitGroup,如下一
针对Golang1.9的sync.RWMutex进行分析,与Golang1.10基本一样除了将panic改为了throw之外其他的都一样。RWMutex是读写互
golang里出现多goroutine的场景很常见,最常用的两种方式就是WaitGroup和Context,今天我们了解一下Context的应用场景使用场景场景
本文实例讲述了php中实现可以返回多个值的函数用法。分享给大家供大家参考。具体分析如下:在python和golang中都有一个函数同时返回多个值的方法,其实ph
问题描述:两个go程轮流打印一个切片。Golang实现:使用两个channel,只用来判断packagemainimport("fmt""sync")//两个g