Junior
Mi a goroutine?
sobes.tech MI
Válasz az MI-től
Könnyű végrehajtási szálak, amelyeket a Go futtatókörnyezete kezel. A go kulcsszóval hozzák létre, mielőtt egy függvényt hívnánk.
Fő jellemzők:
- Kevesebb memóriafelhasználás: A goroutine egy kis veremmérettel kezdődik (általában 2 KB), amely dinamikusan növelhető vagy csökkenthető.
- Gyorsabb létrehozás: Egy goroutine létrehozása sokkal gyorsabb, mint egy rendszer szálé.
- Multiplexálás rendszer szálakon: Sok goroutine multiplexálható kevesebb rendszer szálra a Go ütemezője által.
- Kooperatív ütemezés: A goroutine-ok nem preemptíven szakadnak meg; önként adják át az irányítást az ütemezőnek (pl. blokkoló hívások vagy explicit
runtime.Gosched()hívások esetén).
Létrehozási példa:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Helló a goroutine-ból!")
}
func main() {
go sayHello() // A sayHello-t goroutine-ként indítja
fmt.Println("Helló a fő függvényből!")
time.Sleep(1 * time.Second) // Hogy a fő függvény ne érjen véget a goroutine előtt
}
Összehasonlítás szálakkal:
| Jellemző | Go goroutine-ok | Rendszer szálak |
|---|---|---|
| Kezelés | Go futtatókörnyezete | Operációs rendszer |
| Memóriafelhasználás | Alacsony, dinamikus verem | Magas, fix verem |
| Létrehozás | Gyors | Lassú |
| Ütemezés | Kooperatív | Preemptív |
| Szinkronizáció | Csatornák, sync csomag | Mutexek, OS szemináriumok |