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