Go 言語プログラムのランタイム (ランタイム) には、小さなタスク スケジューラが実装されています。この一連のスケジューラの動作原理は、オペレーティング システムのスレッドのスケジューリングと同様であり、Go プログラム スケジューラは各タスクに CPU リソースを効率的に割り当てることができます。従来のロジックでは、開発者はスレッド プール内のスレッドと CPU コアの数の間の対応を維持する必要があります。同様に、Go では runtime.GOMAXPROCS() 関数を通じて実行することもできます。形式は次のとおりです。
runtime.GOMAXPROCS(逻辑CPU数量)
ここでの論理 CPU の数には次の値を指定できます。
- <1: 値を変更しないでください。
- =1: シングルコア実行。
- >1: マルチコアの同時実行。
一般に、runtime.NumCPU() を使用して CPU の数をクエリし、runtime.GOMAXPROCS() 関数を使用して設定できます。次に例を示します。
runtime.GOMAXPROCS(runtime.NumCPU())
Go 1.5 より前は、デフォルトでシングルコア実行が使用されていました。 Go バージョン 1.5 以降では、コードを同時に実行して CPU を最も効率的に利用できるように、上記のステートメントがデフォルトで実行されます。
GOMAXPROCS は環境変数でもあり、アプリケーションの起動前に環境変数を設定することも同じ役割を果たすことができます。
「 Go言語GOMAXPROCS(同時実行の実行パフォーマンスの調整)」についてわかりやすく解説!絶対に観るべきベスト2動画
【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
【プログラミング入門】これからはじめるGo(Go言語/golang)- tenntenn Conference 2022