Go 言語 [GPM モデル]

ここに画像の説明を挿入します

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 を利用できないことを防ぐためです。

コルーチンのスケジューリングプロセス

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_54061333/article/details/132794632