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

Go で同時実行ゴルーチンの数を一定に維持するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-02 01:22:15
オリジナル
645 人が閲覧しました

How to Maintain a Constant Number of Concurrent Goroutines in Go?

ゴルーチンの数を一定にする方法

Go での同時プログラミングでは、タスクを同時に実行するために複数のゴルーチン (軽量スレッド) を作成します。ゴルーチンの完了を管理するのは一般的ですが、特定の数のゴルーチンを同時に実行することを保証する必要がある場合には、別の課題が生じます。

処理すべきタスクが大量にあり、制限したいシナリオを考えてみましょう。任意の時点でアクティブなゴルーチンの数。たとえば、受信リクエストを処理するプロセスがあり、システムの安定性を維持するために同時リクエストの数を制限したいと考えているとします。

これを実現するには、「制限された並列処理」の手法を使用できます。 Go 同時実行パターンの記事を参照してください。重要なアイデアは、ワーカー ゴルーチンの数を制御するための制限ガードとして空の構造体のチャネルを使用することです。

提供されたコード スニペットでは、ガード チャネルはゴルーチンの最大数に等しい容量で初期化されます。同時に実行したいと考えています (この場合は 10)。この制限を確保するために、新しい goroutine の作成では、最初にガード チャネルから空の構造体を受信しようとします。チャネルがいっぱいの場合 (ゴルーチンの制限に達したことを示します)、スロットが使用可能になるまで作成はブロックされます。

各ゴルーチンは作業を完了すると、空の構造体をガード チャネルに返します。別の goroutine を開始できるようになります。このメカニズムを通じて、アクティブな goroutine の数が指定された範囲内に留まることが保証されます。

例:

  • maxGoroutines 変数は、同時実行 goroutines の最大数を定義します。
  • ガード チャネルは容量 10 で初期化され、使用できるゴルーチンの最大数が制限されます。
  • ワーカー関数は、各ゴルーチンが実行する個々のタスクを表します。
  • メイン関数は 30 個のゴルーチンを作成しますが、ガード チャネルの制限により、そのうちの 10 個だけが同時に実行できます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート