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 サイトの他の関連記事を参照してください。