Оптимистичная блокировка

Версия 1.13 от Alexandr Fokin на 2023/08/24 13:14

 

Алгоритм
  1. Берем элемент (не блокируя) (фиксируем version/timestamp)
  2. Производим обработку.
  3. Атомарно проверяем, что version/timestamp не изменился.
    (иначе:
    ошибка (прерываем операцию)
    или повторная попытка обработки на основании новой версии данных
    или игнорирование, что исходные данные изменились с момента начала обработки
  4. Сохраняем элемент.
 Compare and swap (CAS)
Особенности
  • Плохо подходит для ситуации, когда ресурс блокируется часто (плохо работает, приводит к повышенной нагрузке вычислений т.к. постоянно перевыполняется блок обработки). Предполагается, что ресурс не будет изменен за время выполнения операции.
  • Не подходит для операций, которые не являются идемпотентными (например запросы во внешние сервисы).
  • В некоторых случаях может использовать для управления отсоединенными данными (Предполагая, что данные в основном хранилище либо не будут изменены, либо изменение отсоединенных данных будет отброшено, либо существование механизма слияния изменений основного хранилища и отсоединенного данных).

Внутренние ссылки:

Дочерние страницы:
Обратные ссылки:

Теги:
Создал(а) Alexandr Fokin 2022/11/12 21:50