[golang]Golang實現高並發的調度模型---MPG模式


Golang實現高並發的調度模型---MPG模式

傳統的並發形式:多線程共享內存,這也是Java、C#或者C++等語言中的多線程開發的常規方法,其實golang語言也支持這種傳統模式,另外一種是Go語言特有的,也是Go語言推薦的:
CSP(communicating sequential processes)並發模型。不同於傳統的多線程通過共享內存來通信,CSP講究的是“以通信的方式來共享內存”。 “不要以共享內存的方式來通信,相反,要通過通信來共享內存。”

go語言使用MPG模式來實現CSP :
在傳統的並發中起很多線程只會加大CPU和內存的開銷,太多的線程會大量的消耗計算機硬件資源,造成並發量的瓶頸。

M指的是Machine,一個M直接關聯了一個內核線程。
P指的是”processor”,代表了M所需的上下文環境,也是處理用戶級代碼邏輯的處理器。
G指的是Goroutine,其實本質上也是一種輕量級的線程。

 

 

理解:

M關聯了一個內核線程,通過調度器P(上下文)的調度,可以連接1個或者多個G,相當於把一個內核線程切分成了了N個用戶線程;
M和P是一對一關系(但是實際調度中關系多變),通過P調度N個G(P和G是一對多關系),實現內核線程和G的多對多關系(M:N),通過這個方式,一個內核線程就可以起N個Goroutine,同樣硬件配置的機器可用的用戶線程就成幾何級增長,並發性大幅提高。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM