Junior — Middle
Jak je implementována práce s frontou v prostředí s více vlákny?
sobes.tech AI
Odpověď od AI
V Go je práce s haldou (heap) v prostředí s více vlákny pomocí vestavěného sběrače odpadků a plánovače gorutin. Haldy je oblast paměti, kde jsou umístěny dynamické objekty, a k ní může přistupovat více gorutin.
Pro bezpečnou práci s haldou Go používá:
- Sběrač odpadků (GC), který automaticky uvolňuje nepoužívanou paměť a zabraňuje únikům.
- Mutexy a další primitives synchronizace (z balíčku sync), pokud je potřeba explicitně chránit přístup ke sdíleným datům uloženým v haldě.
Příklad: pokud několik gorutin přistupuje ke společné struktuře dat uložené v haldě, je třeba použít sync.Mutex, aby se zabránilo závodům:
var mu sync.Mutex
var sharedData = make(map[string]int)
func writeData(key string, value int) {
mu.Lock()
defer mu.Unlock()
sharedData[key] = value
}
func readData(key string) int {
mu.Lock()
defer mu.Unlock()
return sharedData[key]
}
Tímto způsobem Go zajišťuje bezpečnost práce s haldou pomocí sběrače odpadků a poskytuje nástroje pro synchronizaci podle potřeby.