Heim  >  Artikel  >  Backend-Entwicklung  >  Planungsstrategie der Golang-Coroutine

Planungsstrategie der Golang-Coroutine

WBOY
WBOYOriginal
2024-04-15 18:12:021229Durchsuche

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.

Planungsstrategie der Golang-Coroutine

Planungsstrategie von Golang-Coroutinen

Coroutinen sind leichte Parallelitätsmechanismen in Go. Die Planungsrichtlinie bestimmt, wie die Coroutine-Ausführung geplant wird. Go bietet drei Planungsstrategien:

  • G0
  • G1
  • Nicht-präventive Planung

G0 und G1

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

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.

Praktischer Fall

Mit G0

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)
    }
}

Mit nicht präventiver Planung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn