阅读量:1
在Go语言中,可以使用WaitGroup来实现高并发的数据处理流水线。
WaitGroup是一个计数信号量,用于等待一组并发操作完成。通过Add方法可以增加计数器的值,Done方法可以减少计数器的值,Wait方法可以阻塞直到计数器变为0。
下面是一个使用WaitGroup的高并发数据处理流水线的示例:
package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup numWorkers := 10 dataChan := 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完成。