数据处理流水线:Go WaitGroup的高并发实践

   2025-02-18 3820
核心提示:在Go语言中,可以使用WaitGroup来实现高并发的数据处理流水线。WaitGroup是一个计数信号量,用于等待一组并发操作完成。通过Add

在Go语言中,可以使用WaitGroup来实现高并发的数据处理流水线。

WaitGroup是一个计数信号量,用于等待一组并发操作完成。通过Add方法可以增加计数器的值,Done方法可以减少计数器的值,Wait方法可以阻塞直到计数器变为0。

下面是一个使用WaitGroup的高并发数据处理流水线的示例:

package mainimport ("fmt""sync")func main() {var wg sync.WaitGroupnumWorkers := 10dataChan := make(chan int, 100)// 第一阶段,生成数据wg.Add(1)go func() {defer wg.Done()for i := 0; i < 100; i++ {dataChan <- i}close(dataChan)}()// 第二阶段,处理数据for i := 0; i < numWorkers; i++ {wg.Add(1)go func() {defer wg.Done()for data := range dataChan {result := processData(data)fmt.Println(result)}}()}wg.Wait()}func processData(data int) int {// 此处模拟数据处理过程return data * 2}

在这个示例中,首先创建了一个WaitGroup对象wg和一个缓冲通道dataChan,用于数据在各个阶段之间的传递。

然后,在第一阶段中,启动一个goroutine来生成数据,并向dataChan通道中发送数据。发送完数据后,通过调用close(dataChan)来关闭通道。

在第二阶段中,通过循环启动多个goroutine来处理数据。每个goroutine从dataChan中接收数据,然后调用processData函数来处理数据,并打印处理结果。

最后,通过调用wg.Wait()来等待所有goroutine完成。

这样,就可以实现一个高并发的数据处理流水线。在数据生成阶段和数据处理阶段之间使用通道进行数据传递,通过WaitGroup来等待所有goroutine完成。

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言