golang實現高並發的方法:首先M關聯了一個內核線程,並透過調度器P的調度,接1個或多個G;然後由M和P的一對一關係,透過P調度N個G;最後實作核心執行緒和G的多對多關係【M:N】。
golang實作高並發的方法:
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,同樣硬體配置的機器可用的使用者執行緒就成幾何級成長,並發性大幅提高。
相關學習推薦:Go語言教學
以上是golang如何實現高並發?的詳細內容。更多資訊請關注PHP中文網其他相關文章!