Junior — Middle
Ako systematizovať situáciu, keď je žiadosť o pamäť úspešná, ale zdrojov nie je dosť na jej poskytnutie?
sobes.tech AI
Odpoveď od AI
V Go, keď požiadavka na alokáciu pamäte (napríklad cez make alebo new) úspešne prebehne, ale skutočne dostupné zdroje nie sú dostatočné na úplné využitie, zvyčajne vznikne situácia súvisiaca s nedostatkom pamäte alebo fragmentáciou.
Na systematizáciu takýchto prípadov môžete:
- Spracovať chyby, ktoré vracajú funkcie na alokáciu pamäte, ak existujú (hoci new a make zvyčajne nevracajú chybu, ale spôsobujú panic pri kritickom nedostatku).
- Používať profilovanie a sledovanie pamäte (pprof, runtime.MemStats) na sledovanie využitia zdrojov.
- V prípade panic z nedostatku pamäte použiť recover na spracovanie a logovanie.
Príklad spracovania panic pri nedostatku pamäte:
func safeAlloc() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Pamäť nebola alokovaná:", r)
}
}()
_ = make([]byte, 1<<40) // pokus o alokáciu veľmi veľkého slice
}
Takto sa systémová správa znižuje na správu chýb a sledovanie stavu pamäte v aplikácii.