ローカルマシンで同じコードを実行中に Go Playground がタイムアウトになるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-10-23 23:25:29
オリジナル
433 人が閲覧しました

Why Does the Go Playground Timeout While Running the Same Code on a Local Machine?

Go Playground と Go on Your Machine の矛盾: Goroutine の実行

Goroutine の実行に関する混乱を解決するために、両方の環境でコード スニペットが実行されました。 Go プレイグラウンドとローカル マシン。プレイグラウンドでは「プロセスに時間がかかりすぎました」というエラーが発生し、永続的に実行される Goroutine が作成されたことを示唆していましたが、ローカル マシンではほぼ瞬時に出力が行われました。これにより、メインの Goroutine が終了したときに other() 関数内の Goroutine が終了するのか、それともバックグラウンドで実行を継続するのかという疑問が生じます。

説明

Go プレイグラウンドについて, GOMAXPROCS は 1 に設定されます。これは、一度に 1 つの Goroutine だけが実行されることを示します。ブロックしないと、スケジューラは他の Goroutine に切り替わりません。

コード内では、メインの Goroutine が開始され、done チャネルでブロックされます。スケジューラは other() Goroutine に切り替える必要があります。これにより、done チャネルで値が送信され、両方の Goroutine が実行可能になります。スケジューラは、other() の実行を継続することを選択します。 GOMAXPROCS が 1 であるため、メインのゴルーチンはブロックされたままになります。

other() は無限ループのゴルーチンを起動します。このゴルーチンは実行を継続し、メインのゴルーチンの再開を妨げます。その結果、Playground のタイムアウトが発生します。

ローカルでは、GOMAXPROCS は通常 1 を超えます。その結果、無限ループの Goroutine の実行中に、別の Goroutine (おそらくメインの Goroutine) が同時に実行されます。メインのゴルーチンが戻ると、他の非メインのゴルーチンの完了を待たずにプログラムは終了します。

Go Playground の変更

GOMAXPROCS を明示的に次のように設定することにより、 1 を Go Playground で実行すると、「処理に時間がかかりすぎます」という動作を再現することが可能です。逆に、GOMAXPROCS を 2 などのより高い値に設定すると、多くの場合、実行順序が変更され、タイムアウトなしで正常に終了します。

以上がローカルマシンで同じコードを実行中に Go Playground がタイムアウトになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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