Go では、スレッドは Groutine を実行するエンティティであり、スケジューラの機能は、実行可能な Groutine をワーカー スレッドに割り当てることです。
GPMモデル
M と P の数の間には絶対的な量的な関係はありません。M がブロックされると、P は別の M を作成するか、別の M に切り替えるため、設定されていても複数の M が作成される可能性があります。M が送信していることを発見しruntime.GOMAXPROCS(1)
た
場合G コルーチン自体への P キューが空の場合、他の P キューから積極的に「盗み」ます。このプロセスの開始者はコルーチン スケジューラです。
M がブロックされると、P スケジューラはブロックされた M からバインドされた P を解放し、この P を他の M 領域に与えて実行します。
M と P のパフォーマンスを最大限に活用するために、GPM モデルでは、ブロックされた G1 によって P が永久に遅延されることはありません。
Go では、コルーチンは最大 10 ミリ秒の CPU を占有する可能性がありますが、これは他のコルーチンが CPU を利用できないことを防ぐためです。