Go スケジューラでの M と P の作成について
Go スケジューラは、ゴルーチン、OS スレッド (M)、およびコンテキストを含むモデルで動作します。 /プロセッサー (P)。パフォーマンスを最適化するために、スケジューラーは M と P の作成と使用を動的に管理します。
M の作成
M は、スケジューラーがブロックを実行する必要性を検出したときに作成されます。タスク。コード例では、ゴルーチンはブロッキング データベース操作を実行し、追加の M の作成をトリガーします。作成される M の正確な数は、ブロックされたゴルーチンの数と利用可能なシステム リソースによって異なります。
Creation of P
P は、新しいゴルーチンが起動されるときに作成されます。ただし、スケジューラはゴルーチンごとに新しい P を作成しません。代わりに、既存の P インスタンスを再利用し、GOMAXPROCS の値に等しい固定数の P を維持します。通常は、使用可能な CPU の数に設定されます。
サンプル コード内
テスト コードでは、2 つのバッチで 50 個の goroutine を作成します。データベース操作はブロックされているため、ブロックしているゴルーチンを処理するために必要に応じて M が作成されます。ただし、P インスタンスは再利用されるため、システム上の仮想コアの数を表す 8 P のみが作成されます。
その他のリソース
これについて詳しくは、トピックについては、次のリソースを参照してください:
以上がGo スケジューラは、ブロッキング操作が存在する場合に M と P の作成をどのように管理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。