Sobes.tech
Junior — Middle

Come si può forzare il pianificatore di Go a eseguire il cambio di contesto su un'altra goroutine?

sobes.tech AI

Risposta dell'AI

In Go, per forzare il cambio di contesto tra goroutine si utilizza la funzione runtime.Gosched(). Essa informa il pianificatore che la goroutine corrente è pronta a cedere il processore ad altre goroutine, permettendo loro di essere eseguite.

Esempio di utilizzo:

package main

import (
    "fmt"
    "runtime"
)

func main() {
    go func() {
        for i := 0; i < 5; i++ {
            fmt.Println("Goroutine 1 -", i)
            runtime.Gosched() // cede il processore
        }
    }()

    for i := 0; i < 5; i++ {
        fmt.Println("Goroutine principale -", i)
        runtime.Gosched() // cede il processore
    }
}

In questo modo, runtime.Gosched() permette di dare esplicitamente la possibilità ad altre goroutine di essere eseguite, senza bloccare quella corrente.