ホームページ >バックエンド開発 >Golang >プロデューサー コンシューマーの問題により、ゴルーチンがスリープ状態であるというエラーが発生するのはなぜですか

プロデューサー コンシューマーの問題により、ゴルーチンがスリープ状態であるというエラーが発生するのはなぜですか

WBOY
WBOY転載
2024-02-10 21:40:251006ブラウズ

为什么我会收到 - goroutines are sleeped 错误,因为生产者消费者问题

php エディター Youzi は、プログラミングの問題を解決するときに、「ゴルーチンがスリープされています」という一般的なエラー メッセージに遭遇することがあります。このエラーは通常、プロデューサーとコンシューマーの問題に関連しています。プロデューサーとコンシューマーの問題は、同時プログラミングにおける古典的なシナリオであり、1 つ以上のプロデューサーがデータを生成し、1 つ以上のコンシューマーがそれを処理のために取り出します。コンシューマーがデータを処理できるよりも早くプロデューサーがデータを生成すると、ゴルーチン (Go 言語の軽量スレッド) がスリープ状態になる可能性があります。この記事では、このエラーが発生する理由と解決策を説明します。

質問内容

これは、go ルーチンのプロデューサーと複数のコンシューマーのコードです。 プロデューサはチャネルに情報を注入しており、複数のコンシューマ (それぞれゴールーチン経由) がそれを並行して読み取る必要があります。

リーリー

これはプレイグラウンドへのリンクです - https://go.dev/play/p/yndataeexpb

私が受け取ったエラーはこれです -

###1つ 2番 c 致命的なエラー: すべてのゴルーチンがスリープ状態です - デッドロック!

解決策

プロデューサーが終了したらチャネルを閉じて、コンシューマーがいつ停止すべきかを認識できるようにします。 リーリー

待機グループにコンシューマーの作業が終了したことを知らせます:

リーリー

以上がプロデューサー コンシューマーの問題により、ゴルーチンがスリープ状態であるというエラーが発生するのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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