勵志

勵志人生知識庫

golang gmp模型

Go語言中,GMP模型是一種用於管理和調度的核心機制。以下是GMP模型的主要組成部分:

G (Goroutine):代表Go語言中的協程,每個協程都有自己的棧空間和定時器。

M (Machine):代表作業系統中的核心執行緒,負責實際執行G。

P (Processor):代表調度器,負責將可運行的G分配到M上。

GMP模型的調度策略包括:

復用執行緒:避免頻繁創建和銷毀執行緒,而是對執行緒進行復用。

work stealing機制:當本執行緒無可運行的G時,嘗試從其他執行緒綁定的P中偷取G。

hand off機制:當本地執行緒因G發生阻塞時,執行緒釋放綁定的P,將P轉給其他空閒的M執行緒。

並行:通過GOMAXPROCS設定P的數量,最多有GOMAXPROCS個執行緒分布在多個CPU上同時運行。

搶占:Go中的協程最多隻能占用CPU 10ms,以防止其他協程處於飢餓狀態。

在程式啟動時,會一次性創建所有的P(共GOMAXPROCS個),存放在數組中。M和P的數量沒有絕對的關係,如果一個M發生了阻塞,那麼P就會去嘗試尋找空閒的M,如果沒有空閒的,則會創建新的M。

以上是Go語言GMP模型的基本介紹,希望對你有所幫助。