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
gosegí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.