ホームページ >バックエンド開発 >Golang >Go で同時ゴルーチンの数を制御するにはどうすればよいですか?

Go で同時ゴルーチンの数を制御するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 21:46:11636ブラウズ

How Can I Control the Number of Concurrent Goroutines in Go?

同時ゴルーチン数の制御

多数のゴルーチンを同時に実行すると、適切に設計されたプログラムのパフォーマンスを向上させることができます。ただし、特定のシナリオでは、同時に実行するゴルーチンの数を制限する必要があります。この記事では、任意の時点で実行されるゴルーチンの数を管理する方法について説明します。

制限付き並列処理

Go 同時実行で説明されている「制限付き並列処理」パターンパターンの記事では、同時ゴルーチンの数を制限するためのソリューションが提供されています。このパターンでは、同時に実行できるゴルーチンの数を制御するために容量が制限されたチャネルを利用します。

実装例

次の例を考えてみましょう。多数のタスクを処理するために最大 10 個の同時ゴルーチン:

package main

import "fmt"

func main() {
    maxGoroutines := 10
    guard := make(chan struct{}, maxGoroutines) // Capacity of the channel limits concurrent goroutines

    for i := 0; i < 30; i++ {
        guard <- struct{}{} // Blocking operation to prevent exceeding the limit
        go func(n int) {
            worker(n)
            <-guard // Release the guard when the worker completes
        }(i)
    }
}

func worker(i int) { fmt.Println("doing work on", i) }

Inこの実装では、ガード チャネルが制限要因として機能します。同時ゴルーチンの数がチャネルの最大容量 (10) に達すると、ガード チャネルは新しいゴルーチンの開始をブロックします。実行中のゴルーチンが完了すると、チャネルから受信することでガードが解除され、新しいゴルーチンの実行が可能になります。

結論

「有界並列処理」パターンを利用する容量が限られたチャネルでは、同時ゴルーチンの数を制御して、望ましい最大値が一貫して維持されるようにすることができます。このアプローチは、Go プログラムの並列処理を管理するための構造化された効率的な方法を提供します。

以上がGo で同時ゴルーチンの数を制御するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。