ホームページ > バックエンド開発 > Golang > 「runtime.GOMAXPROCS(2)」と高い CPU 使用率にもかかわらず、Go プログラムがハングするのはなぜですか?

「runtime.GOMAXPROCS(2)」と高い CPU 使用率にもかかわらず、Go プログラムがハングするのはなぜですか?

Barbara Streisand
リリース: 2024-12-22 05:03:13
オリジナル
453 人が閲覧しました

Why Does My Go Program Hang Despite `runtime.GOMAXPROCS(2)` and High CPU Usage?

GOMAXPROCS(2) にもかかわらず、プログラムが停止したままになる

runtime.GOMAXPROCS(2) で構成されたプログラムが引き続き停止するという複雑なシナリオに遭遇しました。数値出力中にハングすることは、複雑な状況です。 CPU 使用率が高いにもかかわらず、for ループのゴルーチンがプログラムの機能を妨げているようです。

原因の究明

このコードの犯人は、という名前のゴルーチンの存在にあります。無限の for ループを一時停止せずに継続的に実行する永遠。このアクションにより、OS スレッド全体が完全に消費され、ランタイムのゴルーチンが事実上妨害されます。

問題の解決

この状況を修正するには、次のことが重要です。不要な永遠の goroutine を削除します。さらに、show 関数の for ループ内にスケジュール ポイントを挿入すると、プログラムの機能を復元できます。

改訂されたコード

func show() {
    for number := 1; number < 999999; number++ {
        time.Sleep(1000)
        fmt.Println(number)
        runtime.Gosched() // Scheduling point to yield control to the runtime
    }   
}
ログイン後にコピー

ビジー ループの排除

生産的な作業がまったくない忙しいループを避けることが重要です。これらは CPU リソースを不必要に消費し、ゴルーチンの全体的なパフォーマンスに悪影響を及ぼします。代わりに、ループに一時停止を組み込むか、プログラムの動作を最適化するためにループを完全に削除することを検討してください。

以上が「runtime.GOMAXPROCS(2)」と高い CPU 使用率にもかかわらず、Go プログラムがハングするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート