Sobes.tech
Junior — Middle

Care este diferența dintre strategia pesimistă și cea optimistă de blocare a resurselor în sisteme?

sobes.tech AI

Răspuns de la AI

Strategiile de blocare pesimistă și optimistă diferă în abordarea lor pentru gestionarea accesului concurent:

  • Blocarea pesimistă presupune că vor apărea conflicte de acces, așa că resursa este blocată imediat la începutul lucrului cu ea. Alte procese sau fire de execuție așteaptă eliberarea blocajului. Acest lucru reduce probabilitatea conflictelor, dar poate duce la întârzieri și blocări.

  • Blocarea optimistă presupune că conflictele sunt rare, așa că blocarea nu se aplică imediat. În schimb, la salvarea modificărilor, se verifică dacă resursa s-a schimbat de la citire (de exemplu, prin versiune sau timestamp). Dacă se detectează un conflict, operațiunea se repetă sau se anulează.

În Go, de exemplu, blocarea pesimistă se implementează prin mutex (sync.Mutex), iar cea optimistă prin comparație și schimb (sync/atomic sau verificarea versiunilor).

Exemplu de blocare pesimistă:

var mu sync.Mutex

mu.Lock()
// lucru cu resursa
mu.Unlock()

Blocarea optimistă necesită logică suplimentară pentru verificarea modificărilor, de exemplu:

version := resource.Version
// lucru cu resursa
if resource.Version != version {
    // conflict, repetă operațiunea
}

Alegerea strategiei depinde de frecvența conflictelor și de cerințele de performanță.