Middle
Ko jūs zināt par paketi sync.Map?
sobes.tech AI
Atbilde no AI
sync.Map irs ir nodrošina paralēli drošu hašatabeli. Tas ir optimizēts gadījumiem, kad atslēgas galvenokārt tiek lasītas un retāk rakstītas.
Galvenās īpašības:
- Paralēla drošība: Nodrošina drošu piekļuvi no vairākiem gorutīniem bez skaidriem bloķējumiem.
- Optimizēts lasīšanai: Pirmo reizi lasot katru atslēgu, tā tiek kešota tikai lasīšanai paredzētā kopijā. Nākamie lasījumi no šīs kešatmiņas neprasa bloķēšanu.
- Dinamiska dzēšana: Dzēstie elementi vispirms tiek atzīmēti kā dzēsti, un patiesā dzēšana notiek noteiktos apstākļos, lai samazinātu rakstīšanas bloķējumus.
- Trūkst
Len()metodes: AtbalstsLen()metodei padarītu paralēli drošu realizāciju sarežģītu un dārgu. - Nepiemērots pastāvīgi mainīgiem datiem: Bieži rakstot un dzēšot, tas var būt mazāk efektīvs nekā parasta
maparsync.Mutexvaisync.RWMutex.
Galvenās metodes:
Load(key any) (value any, ok bool): Ielādē saistīto vērtību ar atslēgu. Ja atslēga nav, atgriežfalse.Store(key, value any): Saglabā vērtību ar atslēgu. Var izmantot pievienošanai vai atjaunināšanai.LoadOrStore(key any, value any) (actual any, loaded bool): Ielādē saistīto vērtību, ja tā jau pastāv. Pretējā gadījumā saglabā norādīto vērtību. Atgriež faktisko vērtību un zīmi, vai vērtība tika ielādēta (true) vai saglabāta (false).Delete(key any): Dzēš vērtību ar atslēgu.Range(f func(key, value any) bool): Iterē pa elementiem nejaušā secībā. Funkcijaftiek izsaukta katrai atslēgas-vērtības pāri. Jafatgriežfalse, iterācija tiek pārtraukta.
Piemērs lietošanai:
import "sync"
var m sync.Map
func process(key string, value int) {
m.Store(key, value)
v, ok := m.Load(key)
if ok {
// Izmantojam v
}
m.Range(func(key, value any) bool {
// Apstrādājam elementus
return true // Turpinām iterāciju
})
}
Kopumā, sync.Map ir labs izvēle, kad paralēli lasījumi ievērojami pārsniedz rakstus un dzēšanas. Pretējā gadījumā, map lietošana kopā ar sync.Mutex vai sync.RWMutex var būt piemērotāka.