「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go の同時実行パターン。ワーカー プールとファンアウト/ファンイン

Go の同時実行パターン。ワーカー プールとファンアウト/ファンイン

2024 年 11 月 6 日に公開
ブラウズ:621

Concurrency patterns in Go; worker pools and fan-out/fan-in

Go はその優れた同時実行モデルで知られていますが、多くの開発者はゴルーチンとチャネルのみに焦点を当てています。ただし、ワーカー プールやファンアウト/ファンインなどの同時実行パターンにより、実際の効率が得られます。

この記事では、これらの高度な概念について説明し、Go アプリケーションのスループットを最大化するのに役立ちます。

同時実行性が重要な理由

同時実行により、特に I/O 操作、Web リクエスト、バックグラウンド処理などのタスクを処理する場合、プログラムはタスクを効率的に実行できます。 Go では、ゴルーチンは何千もの同時タスクを管理するための軽量な方法を提供しますが、構造がないとボトルネックに遭遇する可能性があります。そこでワーカー プールとファンアウト/ファンイン パターンが登場します。

ワーカープール

ワーカー プールを使用すると、固定の「ワーカー」にタスクを割り当てることでゴルーチンの数を制限できます。これにより、オーバーサブスクリプションが防止され、リソース消費が削減され、タスクの実行が管理しやすくなります。


package main

import (
    "fmt"
    "sync"
    "time"
)

func worker(id int, jobs 

この例では:

  • ジョブを同時に処理する 3 人のワーカーがいます。
  • 各ジョブはチャネル経由でワーカーに渡され、結果は処理のために収集されます。

ファンアウト/ファンイン パターン

ファンアウト/ファンイン パターンにより、複数のゴルーチンが同じタスクを処理できるようになり、ファンインでは結果が 1 つの出力に収集されます。これは、タスクを分割して結果を集計する場合に便利です。


package main

import (
    "fmt"
    "sync"
    "time"
)

func workerFanOut(id int, tasks 

上記のコード内:

  • ファンアウト: タスクを同時に処理する複数のゴルーチン (ワーカー) を作成します。
  • ファンイン: 処理後、すべてのワーカーの結果を集約してさらなる処理を行うことができます。

同時実行パターンを適用して、Web サーバー、バッチ処理システム、または I/O バウンドのアプリケーションを最適化できます。ワーカー プールやファンアウト/ファンインなどのパターンを使用すると、システム容量を圧迫することなく最適なリソース使用が保証されます。

知識を増やすための次のステップ:

  • これらのパターンを他の同時実行性の課題にどのように拡張できるかを検討してください。
  • リクエストを管理するワーカー プールを使用してリアルタイム Web サービスを構築します。

Go の同時実行を成功させる鍵は構造です。これらの同時実行パターンをマスターすると、Go スキルがレベルアップし、高パフォーマンスのアプリケーションを作成できるようになります。

次の投稿で Go についてさらに詳しく説明しますので、お楽しみに!

本を買ってサポートしてもらえます :)

リリースステートメント この記事は次の場所に転載されています: https://dev.to/envitab/concurrency-patterns-in-go-worker-pools-and-fan-outfan-in-6ka?1 侵害がある場合は、study_golang@163 までご連絡ください。 .comを削除してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3