技术文摘
Golang 函数中怎样运用 WaitGroup 协调并发任务
2025-01-09 03:23:19 小编
Golang 函数中怎样运用 WaitGroup 协调并发任务
在Go语言中,并发编程是其一大特色。当我们在函数中需要处理多个并发任务,并确保所有任务都完成后再进行下一步操作时,WaitGroup就派上了用场。
WaitGroup是Go语言标准库中sync包提供的一个结构体,用于等待一组协程(goroutine)完成。它主要有三个方法:Add、Done和Wait。
首先是Add方法。这个方法用于设置需要等待的协程数量。在启动协程之前,我们需要通过Add方法告诉WaitGroup有多少个协程需要等待。例如,如果我们要启动3个协程,就可以调用wg.Add(3),其中wg是WaitGroup的实例。
接着是Done方法。在每个协程内部,当协程的任务完成后,需要调用Done方法来通知WaitGroup该协程已经完成。Done方法实际上就是将WaitGroup内部的计数器减1。
最后是Wait方法。在所有协程启动之后,我们可以调用Wait方法来阻塞当前的执行流程,直到WaitGroup内部的计数器变为0,也就是所有协程都调用了Done方法。
下面是一个简单的示例代码:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
wg.Add(1)
go func(num int) {
defer wg.Done()
fmt.Printf("协程 %d 完成任务\n", num)
}(i)
}
wg.Wait()
fmt.Println("所有协程任务完成")
}
在这个示例中,我们启动了3个协程,每个协程完成任务后调用Done方法,最后通过Wait方法等待所有协程完成后输出提示信息。
通过合理运用WaitGroup,我们可以有效地协调Go函数中的并发任务,确保程序的正确执行和资源的合理利用。它使得并发编程变得更加简单和可靠,让我们能够充分发挥Go语言在并发处理方面的优势。
- 每个项目都必须采用 DevOps 吗?
- 单体架构向微服务转型的 12 种设计原则与优秀实践
- Elasticsearch 从基础概念到生产应用完整指南
- 影响数代程序员的编程书籍
- 携手探秘 Maven——知根知底
- 2020 年 JVM 生态报告剖析
- 必知!Python 跟踪数据的技巧
- 12 个 JavaScript 技能提升概念
- 2020 年 16 个实用的 Vue UI 库
- 8 个锦囊 成就优秀 Java 开发者
- 哪些代码量少却厉害经典的算法或项目案例存在于世界上?
- PWA 与原生应用:孰优孰劣
- 探究微信「看一看」的推荐机制
- 前端高级进阶:Javascript 代码的压缩原理
- 菜鸟借助 Python 预测疫情结束时间