Heim > Artikel > Backend-Entwicklung > Planungsstrategie der Golang-Coroutine
Go-Coroutine-Planung hat drei Strategien: G0 und G1: präventive Planung, Priorität G1 > G0 und G1: präventive Planung, Priorität G1 > Nicht-präventive Planung: Die Coroutine läuft, bis sie aktiv CPU-Ausführungsrechte aufgibt.
Coroutinen sind leichte Parallelitätsmechanismen in Go. Die Planungsrichtlinie bestimmt, wie die Coroutine-Ausführung geplant wird. Go bietet drei Planungsstrategien:
G0 und G1 sind beide präemptive Planung. Dies bedeutet, dass eine laufende Coroutine durch eine Coroutine mit höherer Priorität verdrängt werden kann.
G1 hat eine höhere Priorität als G0. Wenn sich beide Coroutinen im ausführbaren Zustand befinden, wird die G1-Coroutine zuerst ausgeführt.
Nicht-präventive Planung ist nicht-präventiv. Dies bedeutet, dass die Ausführung von Coroutinen nicht verhindert werden kann. Es wird weiter ausgeführt, bis die CPU-Ausführung freiwillig aufgegeben wird.
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) } }
Das obige ist der detaillierte Inhalt vonPlanungsstrategie der Golang-Coroutine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!