Sobes.tech
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: Atbalsts Len() 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 map ar sync.Mutex vai sync.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ā. Funkcija f tiek izsaukta katrai atslēgas-vērtības pāri. Ja f atgriež 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.