首頁 >後端開發 >Golang >Go 調度程序何時以及為何分配新的 M 和 P 處理器?

Go 調度程序何時以及為何分配新的 M 和 P 處理器?

Linda Hamilton
Linda Hamilton原創
2024-10-30 17:36:03984瀏覽

When and Why Does the Go Scheduler Allocate New M and P Processors?

Go 調度程序何時以及為何分配新的 M 和 P 處理器

了解 Go 運行時的調度模型對於優化應用程式效能至關重要。該模型的一個關鍵方面是 M(機器)和 P(處理器)的分配。

何時建立 M 和 P?

M 處理器在何時創建:

  • 啟動一個新的goroutine(除非有空閒的M)
  • 現有的M 阻塞在A 系統呼叫上(建立一個新的作業系統線程,稱為M )

P 處理器是在所有本地運行隊列已滿時創建的,一個goroutine 正在運行,其鄰居goroutine 準備好運行被放入全域隊列中,並且它包含一個p。

阻塞任務和 P 重用

在提供的測試程式碼中,goroutine 執行阻塞資料庫操作。阻塞任務會從 P 個處理器移除 M 個處理器。

在這種情況下,需要建立新的 M 個處理器來處理阻塞的 goroutine。最初的 8 個(虛擬核心數)M 個處理器對於第二批來說是不夠的。新的 M 個處理器將根據需要分配。

其他資源

  • https://www.programmersought.com/article/795578​​85527/
  • blog.golang.org/go-goroutine-os-thread-and-cpu-management

以上是Go 調度程序何時以及為何分配新的 M 和 P 處理器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn