Golang 多核运算处理大量数据
package main
import (
"fmt"
"runtime"
"sync"
)
// 假设这是一个大数据处理函数
func processData(data []int, result chan int) {
sum := 0
for _, value := range data {
sum += value
}
result <- sum
}
func main() {
// 设置Go程的数量等于CPU核心数
runtime.GOMAXPROCS(runtime.NumCPU())
// 创建数据切片
data := make([][]int, 10)
for i := range data {
data[i] = make([]int, 1000)
for j := range data[i] {
data[i][j] = i * 1000 + j
}
}
// 创建result通道
results := make([]chan int, len(data))
var wg sync.WaitGroup
wg.Add(len(data))
// 并发处理每个数据集
for i, subset := range data {
results[i] = make(chan int)
go func(data []int, result chan int) {
defer wg.Done()
processData(data, result)
}(subset, results[i])
}
// 等待所有计算完成
go func() {
wg.Wait()
for _, result := range results {
close(result)
}
}()
// 汇总结果
sum := 0
for _, result := range results {
sum += <-result
}
fmt.Println("总和:", sum)
}
这段代码首先设置了Go程的数量等于CPU的核心数,以充分利用多核心处理能力。然后,创建了一个二维数据集,并且并发处理每个子集。使用sync.WaitGroup
来同步并等待所有计算完成。最后,汇总所有部分的计算结果并打印出来。这个例子展示了如何在Go语言中有效地利用多核心处理海量数据。
评论已关闭