Goではデータを並列処理するにはどうしたらよいですか?

Go言語では、goroutineとチャネルを使用して、同じデータを並列に処理できます。以下にサンプルコードを示します。

package main

import (
	"fmt"
	"sync"
)

func process(data int, wg *sync.WaitGroup, result chan<- int) {
	// 处理数据的逻辑
	// ...

	// 将处理结果发送到结果通道
	result <- data * 2

	// 完成一个goroutine的工作,减少WaitGroup的计数
	wg.Done()
}

func main() {
	// 创建一个WaitGroup来等待所有goroutine完成
	var wg sync.WaitGroup

	// 创建一个结果通道
	result := make(chan int)

	// 设置并发的goroutine数量
	concurrency := 5

	// 启动goroutine进行并发处理
	for i := 0; i < concurrency; i++ {
		// 增加WaitGroup的计数
		wg.Add(1)

		// 启动一个goroutine进行处理
		go process(i, &wg, result)
	}

	// 等待所有goroutine完成
	wg.Wait()

	// 关闭结果通道
	close(result)

	// 从结果通道读取结果并打印
	for r := range result {
		fmt.Println("Result:", r)
	}
}

上記コードでは、sync.WaitGroupを使用し、すべてのゴルーチンが完了するまで待機しています。各ゴルーチンはデータを処理後、結果をresultチャンネルに出力します。最後に、for rangeループを使用して結果チャンネルを読み込み、その結果を出力しています。

sync.WaitGroupで全てのgoroutineが終了するのを待たないと、メインのgoroutineが先に終了してしまう可能性があり、それによって一部のgoroutineの作業が中断されてしまうことに注意してください。したがって、全てのgoroutineが作業を完了させることを確実にするため、sync.WaitGroupを使用して goroutineの実行を調整する必要があります。

bannerAds