Расскажи про оптимистичную и пессимистичную блокировки, когда их применять?
Answer from AI
sobes.tech AI
Оптимистичная и пессимистичная блокировки — это два подхода к управлению конкурентным доступом к данным.
-
Пессимистичная блокировка предполагает, что конфликтов будет много, поэтому ресурс блокируется на время операции, чтобы другие не могли его изменить. Обычно используется в системах с высокой конкуренцией и критичностью данных.
-
Оптимистичная блокировка предполагает, что конфликты редки. Операция выполняется без блокировок, но перед сохранением проверяется, не изменился ли ресурс с момента чтения (например, по версии или timestamp). Если изменился — операция откатывается или повторяется.
Когда применять:
-
Пессимистичная блокировка подходит для транзакций с длительным временем выполнения и высокой вероятностью конфликтов, например, банковские операции.
-
Оптимистичная — для систем с низкой конкуренцией, где важно не блокировать ресурсы, например, веб-приложения с редкими конфликтами.
Пример оптимистичной блокировки на Kotlin с использованием версии:
data class Entity(var data: String, var version: Int)
fun updateEntity(entity: Entity, newData: String, currentVersion: Int): Boolean {
if (entity.version != currentVersion) {
// Конфликт, версия изменилась
return false
}
entity.data = newData
entity.version += 1
return true
}
Здесь перед обновлением проверяем, что версия не изменилась, иначе откатываем операцию.