Sobes.tech
Middle

sync.Map пакети жөнүндө эмне билесиз?

sobes.tech AI

AIден жооп

Пакет sync.Map камсыздайт параллелдүү коопсуз хеш-таблица. Ал оптималдаштырылган учурлар үчүн, кагаздар негизинен окуулуп жана жазуулар сейрек болот.

Негизги өзгөчөлүктөр:

  • Параллелдүү коопсуздук: Бир нече горутиналардан коопсуз жеткиликтүүлүктү камсыз кылат, ачык блоктоолорсуз.
  • Окууга оптималдаштырылган: Ар бир ачкыч үчүн биринчи окулганда, ал тексти үчүн кэшке сакталат. Кийинки окулуштар бул кэштен блоктоолорду талап кылбайт.
  • Динамикалык өчүрүү: Өчүрүлгөн элементтер биринчи белгиленет, андан кийин белгиленген шарттарда чынжырдуу өчүрүү жүргүзүлөт, жазуу блоктоолорун минималдаштыруу үчүн.
  • Len() методу жок: Len() методуна колдоо параллелдүү коопсуз ишке ашырууну татаал жана кымбат кылат.
  • Туруктуу өзгөрүп жаткан маалыматтарга ылайыктуу эмес: Көп жазуулары жана өчүрүүлөрү болсо, ал жөнөкөй map менен салыштырганда азыраак эффективдүү болушу мүмкүн, sync.Mutex же sync.RWMutex менен.

Негизги методдору:

  • Load(key any) (value any, ok bool): Ключ менен байланышкан маанини жүктөө. Эгер клуч жок болсо, false кайтарат.
  • Store(key, value any): Ключ үчүн маанини сактоо. Ар кандай кошуу же жаңыртуу үчүн колдонулушу мүмкүн.
  • LoadOrStore(key any, value any) (actual any, loaded bool): Эгер ал мурда бар болсо, байланышкан маанини жүктөө. Эч болбосо, көрсөтүлгөн маанини сактоо. Чын маанини жана белгилөөчү белгилерди кайтарат, мааниге жүктөлдүбү (true) же сакталдыбы (false).
  • Delete(key any): Ключ үчүн маанини өчүрүү.
  • Range(f func(key, value any) bool): Элементтерди каалаган тартипте өтүү. f ар бир клуч-баалу pair үчүн чакырылат. Эгер f false кайтарса, итерөө токтойт.

Колдонуу мисалы:

import "sync"

var m sync.Map

func process(key string, value int) {
	m.Store(key, value)

	v, ok := m.Load(key)
	if ok {
		// v колдонуу
	}

	m.Range(func(key, value any) bool {
		// элементтерди иштетүү
		return true // итерүүнү улантуу
	})
}

Жалпысынан, sync.Map көптөгөн окуулар жазуулардын жана өчүрүүлөрдүн салыштырмалуу көп болушунда жакшы тандоо. Андан башка, map менен sync.Mutex же sync.RWMutex колдонуу көбүрөөк ылайыктуу болушу мүмкүн.