在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完成。

