Middle
Čo sú to optimistické a pesimistické blokácie?
sobes.tech AI
Odpoveď od AI
Optimistické a pesimistické zámky sú prístupy k riadeniu paralelného prístupu k spoločným dátam v konkurenčných prostrediach (viacvláknové aplikácie, databázy).
Pesimistická zámka:
Predpokladá, že konflikty pri prístupe k dátam sú pravdepodobné. Pred získaním prístupu ku zdroju si vlákno alebo transakcia naň ukladá zámok (exkluzívny alebo zdieľaný). Iné vlákna, ktoré sa snažia získať prístup, budú čakať, kým sa zámok neodstráni.
- Výhody: Zabezpečuje integritu dát, je jednoduchá na implementáciu pri nízkej konkurencii.
- Nevýhody: Môže viesť k blokádam (deadlockom), zníženiu priepustnosti pri vysokej konkurencii.
- Príklady: kľúčové slovo
synchronizedv Jave, zámky na úrovni riadku alebo tabuľky v databázach.
// Príklad pesimistickej zámky v Jave
public class Counter {
private int count = 0;
public synchronized void increment() {
count++; // Zámok na objekte, iba jedno vlákno môže vykonať túto metódu naraz
}
public synchronized int getCount() {
return count;
}
}
Optimistická zámka:
Predpokladá, že konflikty pri prístupe k dátam sú nepravdepodobné. Prístup k dátam sa vykonáva bez zámkov. Pred uložením zmien sa kontroluje, či údaje neboli zmenené iným vláknom od ich načítania. Ak boli zmenené, operácia sa zruší a obvykle sa opakuje (retry).
- Výhody: Vysoká priepustnosť pri nízkej konkurencii, žiadne problémy s deadlockmi.
- Nevýhody: Môžu nastať konflikty, ktoré vyžadujú opakovanie, čo zložitejšie riadenie.
- Príklady: Compare-And-Swap (CAS) operácie, verzionovanie v databázach (napr. použitie stĺpca verzie alebo časovej značky).
// Príklad optimistickej zámky s použitím CAS (java.util.concurrent.atomic)
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicCounter {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
// Pokus o atómické zvýšenie hodnoty
// Ak sa hodnota zmenila medzi čítaním a pokusom o aktualizáciu, operácia sa opakuje
count.incrementAndGet();
}
public int getCount() {
return count.get();
}
}
Porovnanie:
| Charakteristika | Pesimistická zámka | Optimistická zámka |
|---|---|---|
| Predpoklad | Konflikty sú pravdepodobné | Konflikty sú nepravdepodobné |
| Prístup | Zámok pred prístupom | Prístup bez zámku, kontrola pri zápise |
| Pri vysokom tempe konfliktov | Môže spôsobiť blokácie, znížiť priepustnosť | Časté opakovanie operácií, znížiť výkon |
| Pri nízkom tempe konfliktov | Môže vytvárať dodatočné náklady | Vysoká priepustnosť |
| Problém s deadlock | Možný | Nie je možný (z pohľadu konkurenčného prístupu ku zdroju) |