新闻资讯

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻资讯列表

使用Go WaitGroup实现高效并发处理任务

发布时间:2023-10-12 09:39:53

使用Go WaitGroup实现高效并发处理任务

在Go语言中,可使用sync包中的WaitGroup类型来实现高效并发处理任务。
WaitGroup是一个计数信号量,用于等待一组goroutine完成任务。它提供了三个方法:Add()Done()Wait()
下面是一个使用WaitGroup实现高效并发处理任务的示例代码:

package main
import (
"fmt"
"sync"
)
func main() {
numTasks := 10
var wg sync.WaitGroup
for i := 0; i < numTasks; i++ {
wg.Add(1)
go func(taskID int) {
defer wg.Done()
processTask(taskID)
}(i)
}
wg.Wait()
fmt.Println("All tasks completed")
}
func processTask(taskID int) {
fmt.Printf("Task %d started
", taskID)
// 模拟耗时操作
for i := 0; i < 100000000; i++ {
}
fmt.Printf("Task %d completed
", taskID)
}

在这个示例中,我们创建了10个任务,并把它们放入一个WaitGroup中。在每一个任务的goroutine中,我们调用Done()方法来标记任务完成。
最后,在main函数中调用Wait()方法等待所有任务完成。一旦所有任务完成,我们就能够继续履行后续的代码。
通过使用WaitGroup,我们可以高效地并发处理任务,而不需要手动管理goroutine的状态。当所有任务都完成时,我们可以继续履行后续的代码。
请注意,当使用WaitGroup时,确保在每一个任务的goroutine中调用Done()方法,以便正确地减少计数器。否则,Wait()方法将一直阻塞,致使程序没法继续履行。
另外,WaitGroup的计数器也能够通过Add()方法增加,以便在其他地方动态添加任务。一样,Done()方法也能够在其他地方调用,以便在区分的位置标记任务完成。
总结起来,使用Go WaitGroup可以方便地实现高效并发处理任务,它简化了并发编程的复杂性,并提供了一种优雅的方式来等待所有任务完成。