Strategi penjadualan coroutine Golang

WBOY
Lepaskan: 2024-04-15 18:12:02
asal
1234 orang telah melayarinya

Go penjadualan coroutine mempunyai tiga strategi: G0 dan G1: penjadualan awalan, keutamaan G1 > G0 dan G1: penjadualan awalan, keutamaan G1 > Penjadualan bukan preemptive: Coroutine berjalan sehingga ia secara aktif melepaskan hak pelaksanaan CPU.

Strategi penjadualan coroutine Golang

Strategi penjadualan coroutine Golang

Coroutine ialah mekanisme konkurensi ringan dalam Go. Dasar penjadualan menentukan cara pelaksanaan coroutine dijadualkan. Go menyediakan tiga strategi penjadualan:

  • G0
  • G1
  • Penjadualan bukan preemptif

G0 dan G1

G0 dan G1 kedua-duanya adalah penjadualan preemptif. Ini bermakna coroutine yang sedang berjalan boleh didahulukan oleh coroutine keutamaan yang lebih tinggi.

G1 mempunyai keutamaan yang lebih tinggi daripada G0. Jika kedua-dua coroutine berada dalam keadaan runnable, coroutine G1 akan dilaksanakan terlebih dahulu.

Penjadualan bukan preemptif

Penjadualan bukan preemptif ialah bukan preemptif. Ini bermakna bahawa menjalankan coroutine tidak boleh didahulukan. Ia akan terus berjalan sehingga pelaksanaan CPU dihasilkan secara sukarela.

Kes praktikal

Menggunakan 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)
    }
}
Salin selepas log masuk

Menggunakan penjadualan bukan preemptif

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)
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Strategi penjadualan coroutine Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan