Sobes.tech
Middle

Mida teate sync.Map paketist?

sobes.tech AI

Vastus AI-lt

sync.Map pakett 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.