温馨提示×

实时数据处理:利用Go WaitGroup处理数据流

小云
102
2023-10-08 14:00:52
栏目: 编程语言

在Go语言中,可以使用sync.WaitGroup来处理实时数据流。

sync.WaitGroup是一个计数信号量,用来等待一组goroutine的结束。它的主要方法有三个:Add()Done()Wait()

首先,需要创建一个sync.WaitGroup对象,然后在每个goroutine开始之前调用Add()方法,表示要等待的goroutine数量增加1。在goroutine的结尾处调用Done()方法,表示该goroutine已经结束。最后,在主goroutine中调用Wait()方法,等待所有的goroutine都结束。

下面是一个简单的例子,假设有一个数据流需要实时处理,处理的任务是打印每个数据的平方值:

package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
dataStream := []int{1, 2, 3, 4, 5}
for _, data := range dataStream {
wg.Add(1)
go process(data, &wg)
}
wg.Wait()
}
func process(data int, wg *sync.WaitGroup) {
defer wg.Done()
result := data * data
fmt.Println(result)
}

在主函数中,首先创建了一个sync.WaitGroup对象wg。然后,遍历数据流,并为每个数据增加了一个等待任务。接着,启动了一个goroutine来处理每个数据,并传递了&wg作为参数。在process()函数中,打印了每个数据的平方值,并且在函数结尾处调用了wg.Done()来表示该goroutine已经结束。

最后,在主函数中调用wg.Wait()来等待所有的goroutine都结束。这样就可以保证在所有的数据都被处理完之前,主函数不会退出。

0