[Go] golang的MPG调度模型
MPG模式運(yùn)行狀態(tài)1
1)當(dāng)前程序有三個(gè)M,如果三個(gè)M都在一個(gè)cpu運(yùn)行,就是并發(fā),如果在不同的cpu運(yùn)行就是并行
2)M1,M2,M3正在執(zhí)行一個(gè)G,M1的協(xié)程隊(duì)列有三個(gè),M2的協(xié)程隊(duì)列有三個(gè),M3的協(xié)程隊(duì)列有兩個(gè)
3)從上圖可以看到:Go的協(xié)程是輕量級(jí)的線程,是邏輯態(tài)的,Go可以容易的起上萬(wàn)個(gè)協(xié)程
4)其他程序c/java的多線程,往往是內(nèi)核態(tài)的,比較重量級(jí),幾千個(gè)線程就有可能耗光cpu資源
MPG模式運(yùn)行狀態(tài)2
1)分成兩個(gè)部分來(lái)看
2)原來(lái)的情況是M1主線程正在執(zhí)行G1協(xié)程,另外有三個(gè)協(xié)程在等待
3)如果G1協(xié)程阻塞,比如讀取文件或者數(shù)據(jù)庫(kù)
4)這時(shí)就會(huì)創(chuàng)建M2主線程(也可能是從已有的線程池中取出M2)并且將等待的三個(gè)協(xié)程掛到M2下執(zhí)行,M1主線程下的G1仍然執(zhí)行文件的讀寫(xiě)
5)這樣的MPG調(diào)度模式,既可以讓G1執(zhí)行,也不會(huì)讓隊(duì)列的其他協(xié)程一直阻塞
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/taoshihan/p/11295950.html
總結(jié)
以上是生活随笔為你收集整理的[Go] golang的MPG调度模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第1讲 前言
- 下一篇: [Go] golang设置运行的cpu数