1 回答
TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
對于 C/C++程序員認(rèn)為的線程,Go 有三個(gè)概念:G、P、M。
M = 實(shí)際螺紋
G = 戈魯廷斯(即程序中的代碼)
P = 處理器
沒有用于限制 Ms 數(shù)量的 Go API,也沒有用于限制 Gs 數(shù)量的 API - 每次調(diào)用都會(huì)創(chuàng)建一個(gè)新的 API。事情是用來限制Ps的。go func(...)GOMAXPROCS
每個(gè) P 用于跟蹤某些正在運(yùn)行的戈魯廷的運(yùn)行時(shí)狀態(tài)。
你應(yīng)該把它想象成致力于運(yùn)行戈魯廷的女士的峰值數(shù)量。(還有其他一些 Ms 不運(yùn)行 Goroutines,但處理垃圾回收任務(wù),并用作模板線程,用于根據(jù)需要?jiǎng)?chuàng)建新 Ms 等。一些 Ms 致力于保持運(yùn)行時(shí)狀態(tài),而某些 Go 代碼在系統(tǒng)調(diào)用中被阻止。GOMAXPROCS
因此,就程序中的代碼而言,是其Go代碼執(zhí)行的并行度的約束。當(dāng)一個(gè)正在運(yùn)行的戈魯廷到達(dá)它被阻塞的點(diǎn)時(shí),它被停放,其P用于恢復(fù)執(zhí)行其他一些未被阻塞的戈魯廷。GOMAXPROCS
- 1 回答
- 0 關(guān)注
- 86 瀏覽
添加回答
舉報(bào)
