12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
建站问答 时间:2024-12-01 09:27:58
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
在Go语言中,WaitGroup是一个用于等待一组goroutine完成执行的工具。它可以用来协调多个并发任务的执行和等待,确保所有任务完成后再继续执行主线程。下面是一个使用WaitGroup
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
在Go语言中,WaitGroup是一个用于等待一组goroutine完成执行的工具。它可以用来协调多个并发任务的执行和等待,确保所有任务完成后再继续执行主线程。
下面是一个使用WaitGroup的简单示例:
package mainimport ("fmt""sync""time")func worker(id int, wg *sync.WaitGroup) {defer wg.Done()fmt.Printf("Worker %d starting\n", id)time.Sleep(time.Second)fmt.Printf("Worker %d done\n", id)}func main() {var wg sync.WaitGroupfor i := 1; i <= 5; i++ {wg.Add(1)go worker(i, &wg)}wg.Wait()fmt.Println("All workers done")}
在这个例子中,我们定义了一个worker
函数,它接受一个id和一个WaitGroup
参数。在函数开始时,它调用wg.Done()
来通知WaitGroup
任务完成。在主函数中,我们循环创建5个worker goroutine,并且在每个goroutine启动之前调用wg.Add(1)
来增加WaitGroup的计数。最后,我们调用wg.Wait()
来等待所有goroutine完成执行。
输出结果可能是这样的:
Worker 1 startingWorker 5 startingWorker 2 startingWorker 3 startingWorker 4 startingWorker 4 doneWorker 1 doneWorker 2 doneWorker 3 doneWorker 5 doneAll workers done
需要注意的是,WaitGroup的计数不能为负数,因此在调用wg.Done()
之前,我们必须确保每个goroutine都调用了wg.Add(1)
。
WaitGroup还有一个常用的方法wg.Add(delta int)
,可以一次性增加或减少计数器的值。这在任务分发与负载均衡中也很有用。
例如,如果你有一个任务列表,想要将任务分配给一组goroutine进行并发处理,你可以使用WaitGroup来等待所有任务完成。在分配任务时,可以使用wg.Add(len(tasks))
来一次性增加WaitGroup的计数器,然后每个goroutine完成任务时调用wg.Done()
来减少计数器。
总结来说,Go语言的WaitGroup是一个非常有用的工具,可以帮助我们协调多个并发任务的执行和等待。通过合理地使用WaitGroup,我们可以实现任务分发和负载均衡,以提高并发程序的性能和效率。
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19