Junior — Middle
Jak gorutiny komunikují s pamětí při běhu programů v Go?
sobes.tech AI
Odpověď od AI
Gorutiny v jazyce Go jsou lehké vlákna řízená běhovým prostředím Go. Každá gorutina má svůj vlastní zásobník paměti, který je zpočátku malý (přibližně 2 KB) a může se dynamicky rozšiřovat podle potřeby.
Interakce s pamětí probíhá následovně:
- Všechny gorutiny sdílejí společný haldu (heap), kde jsou umístěny dynamicky alokované objekty.
- Paměť na haldě spravuje sběrač odpadků, který sleduje odkazy ze všech gorutin.
- Pro přenos dat mezi gorutinami se obvykle používají kanály (channels), které zajišťují bezpečnou výměnu bez závodů.
- Zásobník každé gorutiny je izolovaný, což umožňuje efektivní přepínání mezi nimi bez velkých nákladů.
Příklad spuštění dvou gorutin, které si vyměňují data přes kanál:
func main() {
ch := make(chan string)
go func() {
ch <- "ahoj z gorutiny"
}()
msg := <-ch
fmt.Println(msg)
}
Tímto způsobem gorutiny sdílejí haldu, ale mají oddělené zásobníky, což zajišťuje efektivní a bezpečné paralelní provádění.