Sobes.tech
Junior — Middle

Mi történik egy gorutinnal, amikor blokkolva van egy folyamat vagy művelet végrehajtásakor?

sobes.tech MI

Válasz az MI-től

Amikor egy goroutine a Go-ban blokkol egy műveleten (például csatornából olvasás, szinkronizációs várakozás, bemenet-kimenet), az szünetel, és a Go ütemezője felszabadítja a rendszer szálát más goroutine-ok futtatására. Ez hatékonyan használja ki a rendszer erőforrásait és skálázza a párhuzamosságot.

Vagyis, egy blokkoló művelet nem blokkolja az egész OS-szálat, csak az adott goroutine-t. Az ütemező átvált más, futásra kész goroutine-okra.

Példa:

ch := make(chan int)
func() {
    val := <-ch // a goroutine blokkol, amíg értéket nem kap
    fmt.Println(val)
}()
ch <- 42 // feloldja a goroutine-t

Ebben a példában a goroutine blokkol a csatornáról való olvasás közben, de az ütemező lehetővé teszi más goroutine-ok számára, hogy dolgozzanak, amíg várakozik.