Junior — Middle
Kuidas rakendatakse töö virnaga mitme niidiga keskkonnas?
sobes.tech AI
Vastus AI-lt
Go keeles mitmekeermelises keskkonnas töö heap-iga realiseeritakse sisseehitatud prügikoguja ja goroutine'i ajastaja abil. Heap on mäluala, kuhu paigutatakse dünaamilised objektid ning sellele pääseb ligi erinevatest goroutinest.
Heap-iga turvalise töö tagamiseks kasutab Go:
- Prügikoguja (GC), mis vabastab automaatselt kasutamata mälu ning ennetab mälulekkeid.
- Mutex'eid ja teisi sünkroniseerimise primitiive (sync paketist), kui on vaja selgelt kaitsta jagatud andmeid, mis asuvad heap'is.
Näide: kui mitu goroutin'it pääsevad ligi ühisele andmestruktuurile, mis asub heap'is, tuleb kasutada sync.Mutex, et vältida võistlusolukordi:
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]
}
Sellisel viisil tagab Go prügikoguja ja sünkroniseerimisvahendite abil heap-iga töötamise turvalisuse ning pakub tööriistu vajadusel sünkroniseerimiseks.