Junior — Middle
Жалпы карта менен блоктоолор менен сактоо жана sync.Map структурасы менен сактоо аралығында кандай айырмачылыктар бар?
sobes.tech AI
AIден жооп
Go'да адаттагы карта (map) агымга туруштук бербейт, шуңа күрә бер үк вакытта берничә горутиннан керү вакытында мәгълүматларны саклау өчен блокировкалар (мәсәлән, sync.Mutex яки sync.RWMutex) кулланырга кирәк. Бу өстәмә кодны таләп итә һәм югары конкуренция вакытында блокировкаларга һәм эшчәнлекнең кимүенә китерергә мөмкин.
sync.Map — бу махсуслаштырылган, агымга каршы торучы структура, еш укулар һәм сирәк язулар белән сценарийлар өчен оптимальләштерелгән. Ул эчке синхронлаштыру һәм оптимизация механизмнарын тормышка ашыра, кодта ачык блокировкалардан качарга мөмкинлек бирә.
Төп аермалар:
- Агымга каршы торучылык:
sync.Mapбашлангычтан агымга каршы тора, гадәти карта — юк. - Үзгәрешләрнең тизлеге:
sync.Mapкүпсанлы параллель укуларда һәм сирәк язуларда нәтиҗәле; гадәти карта блоклар белән түбән конкуренциядә тизрәк булырга мөмкин. - API:
sync.Mapчикләнгән методлар җыелмасын (Load,Store,Delete,Range) ия, туры индекслау белән керүне тәэмин итми.
sync.Map куллану үрнәге:
var m sync.Map
m.Store("key", "value")
if val, ok := m.Load("key"); ok {
fmt.Println(val)
}
Әгәр гади карта һәм керүне контрольдә тоту кирәк булса, map белән sync.RWMutex кулланырга мөмкин:
var (
mu sync.RWMutex
m = make(map[string]string)
)
// Язу
mu.Lock()
m["key"] = "value"
mu.Unlock()
// Укып алу
mu.RLock()
val := m["key"]
mu.RUnlock()