[Go] golang的MPG调度模型
生活随笔
收集整理的這篇文章主要介紹了
[Go] golang的MPG调度模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MPG模式運行狀態1
1)當前程序有三個M,如果三個M都在一個cpu運行,就是并發,如果在不同的cpu運行就是并行
2)M1,M2,M3正在執行一個G,M1的協程隊列有三個,M2的協程隊列有三個,M3的協程隊列有兩個
3)從上圖可以看到:Go的協程是輕量級的線程,是邏輯態的,Go可以容易的起上萬個協程
4)其他程序c/java的多線程,往往是內核態的,比較重量級,幾千個線程就有可能耗光cpu資源
MPG模式運行狀態2
1)分成兩個部分來看
2)原來的情況是M1主線程正在執行G1協程,另外有三個協程在等待
3)如果G1協程阻塞,比如讀取文件或者數據庫
4)這時就會創建M2主線程(也可能是從已有的線程池中取出M2)并且將等待的三個協程掛到M2下執行,M1主線程下的G1仍然執行文件的讀寫
5)這樣的MPG調度模式,既可以讓G1執行,也不會讓隊列的其他協程一直阻塞
?
?
轉載于:https://www.cnblogs.com/taoshihan/p/11295950.html
總結
以上是生活随笔為你收集整理的[Go] golang的MPG调度模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第1讲 前言
- 下一篇: [Go] golang设置运行的cpu数