Goで並列処理数を制御する方法を教えてください

Goでは、goroutineとチャネルを組み合わせて並行処理数を制御できます。一般的な方法を以下に示します。

  1. goroutine と WaitGroup を使う: 並行処理数を制御するには、sync パッケージの WaitGroup を利用できます。WaitGroup オブジェクトを作成し、各 goroutine 内で Add メソッドを呼び出してカウンタを増やし、タスクの実行後に Done メソッドを呼び出してカウンタを減らします。最後に、Wait メソッドを使用して、 カウンタがゼロになるまでメイン goroutine をブロックできます。
import (
    "sync"
)

func main() {
    var wg sync.WaitGroup
    maxConcurrency := 10 // 并发数量

    for i := 0; i < maxConcurrency; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            // 执行任务
        }()
    }

    wg.Wait()
}
  1. バッファ付きチャネルを利用して同時実行数を制御する: 指定したバッファサイズのチャネルを作成し、各ゴルーチン内でチャネルへタスクを送信します。チャネルのバッファサイズは同時実行数を制限します。
func main() {
    maxConcurrency := 10 // 并发数量
    taskCh := make(chan int, maxConcurrency)

    for i := 0; i < maxConcurrency; i++ {
        go func() {
            for task := range taskCh {
                // 执行任务
            }
        }()
    }

    // 发送任务到channel
    for i := 0; i < 100; i++ {
        taskCh <- i
    }

    close(taskCh)
}

これら手法は全て並行処理数制御の効率を高めます。実際の状況に応じて適切な手法を選択できます。

bannerAds