Расскажи про пессимистичные и оптимистичные блокировки
Ответ от нейросети
sobes.tech AI
Пессимистичные и оптимистичные блокировки — это подходы к управлению конкурентным доступом к данным.
-
Пессимистичная блокировка предполагает, что конфликты при доступе к данным вероятны, поэтому ресурс блокируется сразу при начале операции, чтобы другие не могли его изменить. Это снижает вероятность конфликтов, но может привести к задержкам и взаимоблокировкам.
-
Оптимистичная блокировка предполагает, что конфликты редки, поэтому данные не блокируются при чтении. При записи проверяется, не изменились ли данные с момента чтения (например, по версии или таймстампу). Если данные изменились, операция откатывается или повторяется.
Пример в Go: для пессимистичной блокировки можно использовать sync.Mutex, а для оптимистичной — проверять версию данных перед записью.
var mu sync.Mutex
var version int
var data string
// Пессимистичная блокировка
func updateDataPessimistic(newData string) {
mu.Lock()
defer mu.Unlock()
data = newData
version++
}
// Оптимистичная блокировка
func updateDataOptimistic(newData string, oldVersion int) bool {
if oldVersion != version {
return false // данные изменились, откат
}
data = newData
version++
return true
}