Sobes.tech
Junior — Middle

Aký je rozdiel medzi pesimistickou a optimistickou stratégiou blokovania zdrojov v systémoch?

sobes.tech AI

Odpoveď od AI

Pesimistické a optimistické stratégie blokovania sa líšia v prístupe k správe konkurenčného prístupu:

  • Pesimistické blokovanie predpokladá, že dôjde ku konfliktom prístupu, preto je zdroj zablokovaný ihneď pri začiatku práce s ním. Iné procesy alebo vlákna čakajú na uvoľnenie blokácie. To znižuje pravdepodobnosť konfliktov, ale môže viesť k oneskoreniam a zablokovaniu.

  • Optimistické blokovanie predpokladá, že konflikty sú zriedkavé, preto sa blokovanie neaplikuje okamžite. Namiesto toho, pri ukladaní zmien, sa kontroluje, či sa zdroj od posledného čítania nezmenil (napríklad podľa verzie alebo časovej značky). Ak je zistený konflikt, operácia sa opakuje alebo zruší.

V Go napríklad je pesimistické blokovanie realizované cez mutex (sync.Mutex), a optimistické cez porovnanie a výmenu (sync/atomic alebo kontrolu verzií).

Príklad pesimistického blokovania:

var mu sync.Mutex

mu.Lock()
// práca so zdrojom
mu.Unlock()

Optimistické blokovanie vyžaduje ďalšiu logiku na kontrolu zmien, napríklad:

version := resource.Version
// práca so zdrojom
if resource.Version != version {
    // konflikt, opakovať operáciu
}

Voľba stratégie závisí od frekvencie konfliktov a požiadaviek na výkon.