ホームページ >バックエンド開発 >Golang >CPU 使用率が高いにもかかわらず、GOMAXPROCS(2) が設定されていると Go プログラムが停止するのはなぜですか?

CPU 使用率が高いにもかかわらず、GOMAXPROCS(2) が設定されていると Go プログラムが停止するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-13 03:52:13788ブラウズ

Why Does My Go Program Stall with GOMAXPROCS(2) Set Despite High CPU Usage?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。