Sobes.tech
Junior — Middle

Milyen esetekben kerülnek a goroutine-okban lévő feladatok a végrehajtó ütemező közös sorába?

sobes.tech MI

Válasz az MI-től

A Go-ban a feladatokat (goroutine-okat) a következő esetekben helyezi el a végrehajtási ütemező általános sorába (run queue):

  • Amikor egy goroutine-t go segítségével hoznak létre, és készen áll a végrehajtásra, akkor a ütemező sorába kerül.
  • Ha a goroutine blokkolódik (például bemenet/kimenet műveletek, csatornák vagy szinkronizáció során), és később feloldódik, akkor visszakerül a sorba.
  • A jelenlegi goroutine befejezésekor az ütemező kiválasztja a következőt a sorból.

A Go ütemező M:N modellt használ, ahol M a rendszer szálak száma, N pedig a goroutine-ok száma. Sok goroutine van, amelyeket sorokon keresztül osztanak szét a szálak között. Az ütemező sor egy olyan struktúra, ahol a kész goroutine-ok vannak tárolva.

Példa:

func main() {
    go func() {
        fmt.Println("Goroutine indult")
    }()
    time.Sleep(time.Second) // Várunk, hogy a goroutine végrehajtódjon
}

Ebben az esetben, a goroutine a létrehozás után bekerül az ütemező sorába végrehajtásra.