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

Page / - Изменено Alexandr Fokin в 2025/09/20 11:01 

Оптимистичная блокировка 
Изменено Alexandr Fokin
в 2025/09/20 11:01

Оглавление

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

Внутренние ссылки:
Дочерние страницы:
Обратные ссылки:
•	AddOrUpdate
•	Компоненты
•	Примеры.
•	Транзакции
•	Инициализация процесса
•	Ошибки
•	Микросервисы. Паттерны разработки и рефакторинга. | Крис Ричардсон.