欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > golang使用WaitGroup等待多个协程执行完成

golang使用WaitGroup等待多个协程执行完成

2025/9/15 7:12:04 来源:https://blog.csdn.net/fittec/article/details/139529003  浏览:    关键词:golang使用WaitGroup等待多个协程执行完成

导入包:

import ("sync"
)

 

1.初始化等待对象

var wg = sync.WaitGroup{} //初始化协程等待对象

2.添加等待计算器

wg.Add(1) //添加等待计数

3.协程中等待完成

go func(id int) {defer wg.Done() //延迟执行,当前函数执行完成后,执行该语句fmt.Println("工作协程序已启动", id)//time.Sleep(1 * time.Second)fmt.Println("===工作协程序已完成===", id)}(i + 1)

4.等待所有协程执行完成

wg.Wait() //等待所有协程执行完成

5.完整示例

dt1 := time.Now()//使用WaitGroup等待多个协程执行完成var wg = sync.WaitGroup{} //初始化协程等待对象fmt.Println("===启动10个协程序===", dt1)//启动10个协程序for i := 0; i < 10; i++ {wg.Add(1) //添加等待计数go func(id int) {defer wg.Done() //延迟执行,当前函数执行完成后,执行该语句fmt.Println("工作协程序已启动", id)//time.Sleep(1 * time.Second)fmt.Println("===工作协程序已完成===", id)}(i + 1)}wg.Wait() //等待所有协程执行完成dt2 := time.Now()fmt.Println("<<所有协程已执行完成>>", dt2)dtRet := dt2.Sub(dt1)aUnit := ""fmt.Println(dtRet, "毫秒:", dtRet.Milliseconds(), "微秒:", dtRet.Microseconds(), "纳秒:", dtRet.Nanoseconds())if (dtRet.Nanoseconds() / 1000) < 1000 {aUnit = "微秒"} else {aUnit = "毫秒"}fmt.Println("10个协程执行完成花费时间:", dtRet, aUnit)

输出:

===启动10个协程序=== 2024-06-07 15:53:22.4212564 +0800 CST m=+24.048319001
工作协程序已启动 8
===工作协程序已完成=== 8
工作协程序已启动 10
===工作协程序已完成=== 10
工作协程序已启动 6
===工作协程序已完成=== 6
工作协程序已启动 3
===工作协程序已完成=== 3
工作协程序已启动 7
===工作协程序已完成=== 7
工作协程序已启动 2
===工作协程序已完成=== 2
工作协程序已启动 4
===工作协程序已完成=== 4
工作协程序已启动 9
===工作协程序已完成=== 9
工作协程序已启动 5
===工作协程序已完成=== 5
工作协程序已启动 1
===工作协程序已完成=== 1
<<所有协程已执行完成>> 2024-06-07 15:53:22.4217875 +0800 CST m=+24.048850101
531.1µs 毫秒: 0 微秒: 531 纳秒: 531100
10个协程执行完成花费时间: 531.1µs 微秒

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词