Goroutine が途中でスリープしてしまう

PHPz
リリース: 2024-02-09 11:30:31
転載
1118 人が閲覧しました

Goroutine 过早进入睡眠状态

php エディター Banana は、ここでよくある問題、つまり Goroutine が途中でスリープしてしまう問題を紹介します。 Go 言語で Goroutine を使用してタスクを同時に実行するのは非常に効率的ですが、タスクを実行する前に Goroutine がスリープ状態に入り、タスクが正常に進行しない状況に遭遇することがあります。この記事では、この問題の原因を詳細に説明し、誰もが Goroutine をよりよく理解して使用できるようにするための解決策を提供します。

質問内容

コード:

リーリー

このコードは特別なことを何も行っていません。チャネルとゴルーチンを理解したいだけです。しかし、何か問題が発生し、コルーチンが 2 回ループした後にスリープ状態になり、アプリがクラッシュしました。

これが何をするのか分析してみましょう - メッセージは毎秒 link に送信されます。関数 b はそれを 2 か所で受け取るため、print a と b が呼び出されます。したがって、基本的には 1 秒ごとに a と b がコンソールに表示されるはずです。しかし、理由はわかりませんが、それは起こりません。プログラムは a と b を 1 回出力してからクラッシュします。 私はおそらくこの概念を十分に理解していないので (golang は実際には直観的ではありません)、ここで答えが得られることを願っています。

解決策

バッファリングされていないチャネルへの送信は、そこからデータを受信するゴルーチンがある場合にのみ成功します。最初の 2 つの送信では、link チャネルから受信するゴルーチンがあります。しかし、それらは値を受け取って終了し、link から受け取るゴルーチンはもうないので、3 番目のブロックは link に送信されます。他に実行中のゴルーチンがないため、プログラムはデッドロックします。

以上がGoroutine が途中でスリープしてしまうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!