Go WaitGroup里面在嵌套WaitGroup
平时用到协程嵌套不多 想问下WaitGroup组内是否还可以在嵌套一层WaitGroup
我在本地跑测试发现是没有问题 都能执行到 …
func TestGoRoutine(t *testing.T) {
wg := sync.WaitGroup{}
limitNum := 3
wg.Add(limitNum)
for j := 0; j < limitNum; j++ {
go func(index int) {
defer wg.Done()
testRoutine(index)
}(j)
}
wg.Wait()
}
func testRoutine(index int) {
wg2 := sync.WaitGroup{}
limitNum2 := 3
wg2.Add(limitNum2)
for i := 0; i < limitNum2; i++ {
go func(index2 int) {
defer wg2.Done()
fmt.Printf("测试上级Index[%d]Index2:[%d] \n", index, index2)
}(i)
} wg2.Wait()
}
测试结果:
测试上级Index[2]Index2:[2]
测试上级Index[2]Index2:[1]
测试上级Index[1]Index2:[2]
测试上级Index[1]Index2:[0]
测试上级Index[1]Index2:[1]
测试上级Index[2]Index2:[0]
测试上级Index[0]Index2:[1]
测试上级Index[0]Index2:[2]
测试上级Index[0]Index2:[0]
--- PASS: TestGoRoutine (0.00s)
PASS
进程完成,并显示退出代码 0
其实实现的目标是协程里嵌套协程。
需求背景是mysql的分页通过协程处理,每个协程底下还要在进行一次并发查询。
或者有更好的实现方式吗 ?
没有问题,go协程是平行的,忽略上下级关系。两个函数可以看成独立的
不影响,留意好
sync. WaitGroup
的作用范围就行了。very good