ゴルーチンの数を一定にする方法
Go での同時プログラミングでは、タスクを同時に実行するために複数のゴルーチン (軽量スレッド) を作成します。ゴルーチンの完了を管理するのは一般的ですが、特定の数のゴルーチンを同時に実行することを保証する必要がある場合には、別の課題が生じます。
処理すべきタスクが大量にあり、制限したいシナリオを考えてみましょう。任意の時点でアクティブなゴルーチンの数。たとえば、受信リクエストを処理するプロセスがあり、システムの安定性を維持するために同時リクエストの数を制限したいと考えているとします。
これを実現するには、「制限された並列処理」の手法を使用できます。 Go 同時実行パターンの記事を参照してください。重要なアイデアは、ワーカー ゴルーチンの数を制御するための制限ガードとして空の構造体のチャネルを使用することです。
提供されたコード スニペットでは、ガード チャネルはゴルーチンの最大数に等しい容量で初期化されます。同時に実行したいと考えています (この場合は 10)。この制限を確保するために、新しい goroutine の作成では、最初にガード チャネルから空の構造体を受信しようとします。チャネルがいっぱいの場合 (ゴルーチンの制限に達したことを示します)、スロットが使用可能になるまで作成はブロックされます。
各ゴルーチンは作業を完了すると、空の構造体をガード チャネルに返します。別の goroutine を開始できるようになります。このメカニズムを通じて、アクティブな goroutine の数が指定された範囲内に留まることが保証されます。
例:
以上がGo で同時実行ゴルーチンの数を一定に維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。