GOMAXPROCS を 2 に設定してもプログラムが停止する
runtime.GOMAXPROCS(2) を設定するプログラムを実行しようとすると、次のような問題が発生する可能性があります。 CPU 使用率が高いにもかかわらず、予期しないハングアップが発生する。これは、forever() として示されるゴルーチン内の無限ループが原因で発生します。
このループは、有益な作業を実行せずに OS スレッド全体を消費するため、ランタイムのゴルーチンに干渉します。特に Go1.5 では、ガベージ コレクターの stop-the-world フェーズがブロックされる可能性があります。
この問題を解決するには、forever() ループ内にスケジューリング ポイントを導入できます:
func forever() { for { runtime.Gosched() } }
ただし、一般的にはビジー ループを完全に排除し、プログラムをスムーズに実行する方が効率的です。
以上がCPU 使用率が高いにもかかわらず、GOMAXPROCS(2) が設定されていると Go プログラムが停止するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。