Исходный код вики Оптимистичная блокировка

Редактировал(а) Alexandr Fokin 2024/07/05 11:48

Скрыть последних авторов
Alexandr Fokin 1.16 1 (% style="background-color:#ffffff" %)
Alexandr Fokin 1.15 2 |(% style="width:148px" %) |(% style="width:1337px" %)Оптимистичная блокировка, Optimistic lock
Alexandr Fokin 1.13 3 |(% style="width:148px" %)Алгоритм|(% style="width:1337px" %)(((
Alexandr Fokin 1.5 4 1. Берем элемент (не блокируя) (фиксируем version/timestamp)
5 1. Производим обработку.
Alexandr Fokin 1.11 6 1. Атомарно проверяем, что version/timestamp не изменился.
7 (иначе:
Alexandr Fokin 1.12 8 ошибка (прерываем операцию)
9 или повторная попытка обработки на основании новой версии данных
10 или игнорирование, что исходные данные изменились с момента начала обработки
Alexandr Fokin 1.11 11 )
12 1. Сохраняем элемент.
13 )))
14 |(% style="width:148px" %) |(% style="width:1337px" %)Compare and swap (CAS)
Alexandr Fokin 1.13 15 |(% style="width:148px" %)Особенности|(% style="width:1337px" %)(((
Alexandr Fokin 1.9 16 * Плохо подходит для ситуации, когда ресурс блокируется часто (плохо работает, приводит к повышенной нагрузке вычислений т.к. постоянно перевыполняется блок обработки). Предполагается, что ресурс не будет изменен за время выполнения операции.
Alexandr Fokin 1.14 17 (В некоторых реализациях используется случайная задержка перед следующей попыткой обработки, чтобы рассинхронизировать конкурирующих обработчиков и уменьшить вычислительную нагрузку).
Alexandr Fokin 1.9 18 * Не подходит для операций, которые не являются идемпотентными (например запросы во внешние сервисы).
19 * В некоторых случаях может использовать для управления отсоединенными данными (Предполагая, что данные в основном хранилище либо не будут изменены, либо изменение отсоединенных данных будет отброшено, либо существование механизма слияния изменений основного хранилища и отсоединенного данных).
Alexandr Fokin 1.11 20 )))
Alexandr Fokin 1.16 21 |(% style="width:148px" %) |(% style="width:1337px" %)Optimistic locking and automatic retry
22 [[https:~~/~~/enterprisecraftsmanship.com/posts/optimistic-locking-automatic-retry/>>url:https://enterprisecraftsmanship.com/posts/optimistic-locking-automatic-retry/]]
Alexandr Fokin 1.8 23
24 ----
25
26 ==== Внутренние ссылки: ====
27
28 ====== Дочерние страницы: ======
29
30 {{children/}}
31
32 ====== Обратные ссылки: ======
33
34 {{velocity}}
35 #set ($links = $doc.getBacklinks())
36 #if ($links.size() > 0)
37 #foreach ($docname in $links)
38 #set ($rdoc = $xwiki.getDocument($docname).getTranslatedDocument())
39 * [[$escapetool.xml($rdoc.fullName)]]
40 #end
41 #else
42 No back links for this page!
43 #end
44 {{/velocity}}
45
46 ----