タスクを完了するための goroutine を作成しようとしています
それで私はこのコードを書きました。 依存関係のない a、b、c のようなタスクは実装が簡単で、適切に実行されます。 依存タスク d と e を実装する際にいくつかの問題が発生しました。各タスクには 2 つのタスクの依存関係があります。
残っている接続ポイントは 1 つだけで、タスクごとにチャネルを作成してメッセージを配信します。メッセージは、依存タスクの完了後に依存関係の数を減らすために依存タスクによって読み取られます。コード内の チェックポイント 1
コメントを参照してください。
誰かこの問題の解決を手伝ってくれませんか?この場合、Goroutineを実装する方法の部分で立ち往生しています。
コード:
リーリー出力例:
リーリー 上記の実装が欠落しているため、現在 5 つのデータ レース
が見つかります。
より小さなタスク構造と、同期用の waitgroup
の助けを借りて、上記のシナリオを実現できると思います。
これは私が説明するためにいくつかのメモをまとめた例です。
リーリーもちろん、これは完璧な解決策ではありません。対処されていない状況がたくさん考えられます。
###例えば###循環依存関係は最終的にデッドロックにつながります
d => a
または、複数のタスクが別のタスクに依存している場合、その理由は、チャネルから同じ値を 1 回しか読み取ることができないためです。 の方法は次のとおりです。 リーリー
以上がgo ルーチンを使用して pub sub を作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。