ホームページ  >  記事  >  バックエンド開発  >  go ルーチンを使用して pub sub を作成する

go ルーチンを使用して pub sub を作成する

王林
王林転載
2024-02-06 09:35:07680ブラウズ

使用 go 例程创建 pub sub

質問の内容

タスクを完了するための goroutine を作成しようとしています

それで私はこのコードを書きました。 依存関係のない a、b、c のようなタスクは実装が簡単で、適切に実行されます。 依存タスク d と e を実装する際にいくつかの問題が発生しました。各タスクには 2 つのタスクの依存関係があります。

残っている接続ポイントは 1 つだけで、タスクごとにチャネルを作成してメッセージを配信します。メッセージは、依存タスクの完了後に依存関係の数を減らすために依存タスクによって読み取られます。コード内の チェックポイント 1 コメントを参照してください。

誰かこの問題の解決を手伝ってくれませんか?この場合、Goroutineを実装する方法の部分で立ち往生しています。

コード:

リーリー

出力例:

リーリー

上記の実装が欠落しているため、現在 5 つのデータ レース が見つかります。


正解


より小さなタスク構造と、同期用の waitgroup の助けを借りて、上記のシナリオを実現できると思います。

これは私が説明するためにいくつかのメモをまとめた例です。

リーリー

もちろん、これは完璧な解決策ではありません。対処されていない状況がたくさん考えられます。

###例えば###

循環依存関係は最終的にデッドロックにつながります
    a => d
  • および d => a または、複数のタスクが別のタスクに依存している場合、その理由は、チャネルから同じ値を 1 回しか読み取ることができないためです。
  • 最初の問題を解決するには、依存関係グラフを構築し、それが循環的かどうかを確認する必要がある場合があります。 2 番目の方法については、
hacky

の方法は次のとおりです。 リーリー

以上がgo ルーチンを使用して pub sub を作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。