共计 931 个字符,预计需要花费 3 分钟才能阅读完成。
在 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\n", taskID)
// 模拟耗时操作
for i := 0; i < 100000000; i++ {
}
fmt.Printf("Task %d completed\n", taskID)
}
在这个示例中,我们创建了 10 个任务,并把它们放入一个 WaitGroup
中。在每个任务的 goroutine 中,我们调用 Done()
方法来标记任务完成。
最后,在 main
函数中调用 Wait()
方法等待所有任务完成。一旦所有任务完成,我们就可以继续执行后续的代码。
通过使用 WaitGroup
,我们可以高效地并发处理任务,而不需要手动管理 goroutine 的状态。当所有任务都完成时,我们可以继续执行后续的代码。
请注意,当使用 WaitGroup
时,确保在每个任务的 goroutine 中调用 Done()
方法,以便正确地减少计数器。否则,Wait()
方法将一直阻塞,导致程序无法继续执行。
此外,WaitGroup
的计数器也可以通过 Add()
方法增加,以便在其他地方动态添加任务。同样,Done()
方法也可以在其他地方调用,以便在不同的位置标记任务完成。
总结起来,使用 Go WaitGroup
可以方便地实现高效并发处理任务,它简化了并发编程的复杂性,并提供了一种优雅的方式来等待所有任务完成。
丸趣 TV 网 – 提供最优质的资源集合!