Sobes.tech
Junior — Middle

Ի՞նչ է տարբերությունը ստանդարտ մյուտեքսի և ընթերցման և գրելու հնարավորությամբ (RWMutex) մյուտեքսի օգտագործման միջև։

sobes.tech AI

Պատասխան AI-ից

Ստանդարտ Mutex (sync.Mutex) Go-ում ապահովում է ռեսուրսի բացառիկ մուտք՝ յուրաքանչյուր ժամանակ միայն մեկ goroutine կարող է գրավել mutex-ը, մնացածները սպասում են:

Կարդալու և գրելու հնարավորությամբ mutex (sync.RWMutex) թույլ է տալիս.

  • Մի քանի goroutine կարող են միաժամանակ գրավել mutex-ը կարդալու համար (RLock), եթե չկա գրող:
  • Միայն մեկ goroutine կարող է գրավել mutex-ը գրելու համար (Lock), այդ ժամանակ բոլոր ընթերցողները և մյուս գրողները բլոկվում են:

Այսպիսով, այն բարձրացնում է արդյունավետությունը այն սցենարներում, որտեղ ընթերցումների քանակը շատ ավելի մեծ է, քան գրումների, քանի որ ընթերցումները միմյանց չեն բլոկում:

Օրինակ՝

var mu sync.RWMutex
var data int

// Կարդալ
mu.RLock()
fmt.Println(data)
mu.RUnlock()

// Գրանցել
mu.Lock()
data = 42
mu.Unlock()

Եթե օգտագործեք սովորական Mutex, նույնիսկ ընթերցումները միմյանց կբլոկեն, ինչը նվազեցնում է հապավումը: