Может ли кто-нибудь объяснить мне, в чем разница между атомарными операциями и атомарными транзакциями? Мне кажется, что это одно и то же.
атомарные операции и атомарные транзакции
Ответы (3)
В заявлении: атомарная транзакция - это наименьший набор операций для выполнения необходимых шагов. Либо все эти необходимые операции выполняются (успешно), либо атомарная транзакция не выполняется.
Атомарная операция обычно не имеет ничего общего с транзакциями. Насколько мне известно, это происходит из аппаратного программирования, где набор операций (или одна) решается мгновенно.
Концепция атомарности является общей для атомарных транзакций и атомарных операций, но обычно они связаны с разными доменами.
Атомарные транзакции связаны с операциями с базой данных, в которых ВСЕ действия должны быть выполнены или НИ ОДИН из них не завершен. Например, если кто-то бронирует рейс, вы хотите получить оплату И зарезервировать место ИЛИ ничего не делать. Если бы одному из них было позволено добиться успеха без успеха другого, база данных была бы несовместимой.
С другой стороны, атомарные операции обычно связаны с низкоуровневым программированием в отношении многопроцессорных или многопоточных приложений и похожи на критические разделы. Например, если два потока обращаются к одной и той же переменной и изменяют ее, каждый поток выполняет следующие шаги:
- Считайте переменную из хранилища в локальную память.
- Измените значение в локальной памяти.
- Запишите измененное значение обратно в исходное место хранения.
Но в многопоточной системе прерывание или другое переключение контекста может произойти после того, как первый процесс прочитал значение, но не записал его обратно. Затем второй процесс (или прерывание) будет читать и изменять СТАРОЕ значение и записывать его измененное значение обратно в хранилище. Когда первый процесс снова включается, он не знает, что что-то могло измениться, поэтому записывает свое изменение в исходное значение. Следовательно, операция, которую второй процесс проделал с переменной, будет потеряна. Если операция является атомарной, она гарантированно завершится без прерывания после начала. Обычно это достигается с помощью примитивов аппаратного уровня, таких как Test-and-Set или Compare-and-Swap.
Чтобы получить более широкую картину, вы можете взглянуть на:
- MySQL Транзакции и атомарные операции
- Атомарность (системы баз данных)
- Атомарность (программирование)
Некоторые цитаты из цитированных выше ресурсов:
О базах данных:
В атомарной транзакции либо все операции с базой данных выполняются, либо ничего не происходит. Гарантия атомарности предотвращает частичное обновление базы данных, что может вызвать большие проблемы, чем полный отказ от всей серии. Другими словами, атомарность означает неделимость и несводимость.
О программировании:
В параллельном программировании операция (или набор операций) является атомарной, линеаризуемой, неделимой или непрерывной, если остальной части системы кажется, что она происходит мгновенно. Атомарность - это гарантия изоляции от параллельных процессов. Кроме того, атомарные операции обычно имеют определение «успешно или неудачно» - они либо успешно изменяют состояние системы, либо не имеют видимого эффекта.
Я видел, как слово транзакция чаще использовалось для баз данных и операция в программировании, особенно в программировании на уровне ядра.