勵志

勵志人生知識庫

go gmp模型

GMP模型Go語言運行時系統的一部分,它定義了Go程式中的goroutine、處理器(processor,簡稱P)和核心執行緒(machine,簡稱M)之間的關係和互動方式。GMP模型的目標是提高程式的並行計算性能。

G 代表 goroutine,即Go語言中的輕量級執行緒或協程。

M 代表 worker thread 或 machine,是指實際的作業系統執行緒。

P 代表 processor,是Go邏輯處理器,用於執行Go代碼的資源單位。

GMP模型中的關鍵概念包括:

全局佇列:存放等待運行的G。

P的本地佇列:存放等待運行的G,數量限制不超過256G。

P列表:程式啟動時創建,最多有GOMAXPROCS個(可配置)。

M列表:當前作業系統分配到當前Go程式的核心執行緒數。

P和M的數量:P的數量由環境變數`$GOMAXPROCS`或程式中通過`runtime.GOMAXPROCS()`設定。M的數量受限於Go語言設定的最大量10000,但可以通過`runtime/debug`包中的`SetMaxThreads`函式來設定。

運行佇列:包括全局佇列(GRQ)和私有佇列(LRQ),其中全局佇列上的G還沒有分配到具體的P。

GMP模型支持任務竊取機制,當一個處理器空閒時,它可以竊取其他處理器的工作佇列中的goroutine進行處理,以實現負載均衡。此外,調度模型還支持動態調整處理器數量的功能,以適應程式負載的變化,從而提高計算資源的利用效率。