アプリケーションのパフォーマンスを最適化するには、Go ランタイムのスケジューリング モデルを理解することが重要です。このモデルの重要な側面の 1 つは、M (マシン) と P (プロセッサ) の割り当てです。
M と P はいつ作成されますか?
M 個のプロセッサはいつ作成されますか? :
P プロセッサは、すべてのローカル runqueue が満杯のときに作成されます。1 つの goroutine が実行中です。実行準備ができている隣接する goroutine はグローバル キューに入れられ、単一の p が含まれます。
タスクのブロックと P 再利用
提供されたテスト コードでは、ゴルーチンはブロック データベース操作を実行します。タスクをブロックすると、P プロセッサから M プロセッサが削除されます。
この場合、ブロックされたゴルーチンを処理するには、新しい M プロセッサを作成する必要があります。最初の 8 (仮想コアの数) M プロセッサでは、2 番目のバッチには十分ではありません。新しい M プロセッサーは、必要に応じて割り当てられます。
追加リソース
以上がGo スケジューラが新しい M プロセッサと P プロセッサを割り当てるのはいつ、なぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。