Go 協程調度有三種策略:G0 和 G1:搶佔式調度,優先權 G1 > G0。 G0 和 G1:搶佔式調度,優先級 G1 > G0。非搶佔式調度:協程運作至主動讓出 CPU 執行權。
協程是 Go 中輕量級的並發機制。調度策略決定如何調度協程執行。 Go 提供了三種排程策略:
#G0 和G1 都是搶佔式調度。這意味著正在運行的協程可以被更高優先權的協程搶佔。
G1 的優先權高於 G0。如果兩個協程都在可運作狀態,則 G1 協程將先執行。
非搶佔式調度是非搶佔式的。這意味著正在運行的協程不能被搶佔。它將繼續運行,直到主動讓出 CPU 執行權。
package main import ( "fmt" "runtime" "sync" ) func main() { var wg sync.WaitGroup defer wg.Wait() for i := 0; i < 2; i++ { wg.Add(1) go func(i int) { defer wg.Done() fmt.Printf("协程 %d 在 G0 调度器上执行\n", i) runtime.Gosched() }(i) } }
package main import ( "fmt" "runtime" "sync" ) func main() { runtime.LockOSThread() for i := 0; i < 2; i++ { go func(i int) { fmt.Printf("协程 %d 使用非抢占式调度\n", i) }(i) } }
以上是Golang協程的調度策略的詳細內容。更多資訊請關注PHP中文網其他相關文章!