Sobes.tech
Назад к вопросам
Senior
4

Расскажи про оптимистичную и пессимистичную блокировки, когда их применять?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

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
}

Здесь перед обновлением проверяем, что версия не изменилась, иначе откатываем операцию.