атомарные операции и атомарные транзакции

Может ли кто-нибудь объяснить мне, в чем разница между атомарными операциями и атомарными транзакциями? Мне кажется, что это одно и то же.


person user2204378    schedule 27.03.2013    source источник


Ответы (3)


В заявлении: атомарная транзакция - это наименьший набор операций для выполнения необходимых шагов. Либо все эти необходимые операции выполняются (успешно), либо атомарная транзакция не выполняется.

Атомарная операция обычно не имеет ничего общего с транзакциями. Насколько мне известно, это происходит из аппаратного программирования, где набор операций (или одна) решается мгновенно.

person Najzero    schedule 27.03.2013

Концепция атомарности является общей для атомарных транзакций и атомарных операций, но обычно они связаны с разными доменами.

Атомарные транзакции связаны с операциями с базой данных, в которых ВСЕ действия должны быть выполнены или НИ ОДИН из них не завершен. Например, если кто-то бронирует рейс, вы хотите получить оплату И зарезервировать место ИЛИ ничего не делать. Если бы одному из них было позволено добиться успеха без успеха другого, база данных была бы несовместимой.

С другой стороны, атомарные операции обычно связаны с низкоуровневым программированием в отношении многопроцессорных или многопоточных приложений и похожи на критические разделы. Например, если два потока обращаются к одной и той же переменной и изменяют ее, каждый поток выполняет следующие шаги:

  1. Считайте переменную из хранилища в локальную память.
  2. Измените значение в локальной памяти.
  3. Запишите измененное значение обратно в исходное место хранения.

Но в многопоточной системе прерывание или другое переключение контекста может произойти после того, как первый процесс прочитал значение, но не записал его обратно. Затем второй процесс (или прерывание) будет читать и изменять СТАРОЕ значение и записывать его измененное значение обратно в хранилище. Когда первый процесс снова включается, он не знает, что что-то могло измениться, поэтому записывает свое изменение в исходное значение. Следовательно, операция, которую второй процесс проделал с переменной, будет потеряна. Если операция является атомарной, она гарантированно завершится без прерывания после начала. Обычно это достигается с помощью примитивов аппаратного уровня, таких как Test-and-Set или Compare-and-Swap.

person Charley Moore    schedule 19.01.2015

Чтобы получить более широкую картину, вы можете взглянуть на:

Некоторые цитаты из цитированных выше ресурсов:

О базах данных:

В атомарной транзакции либо все операции с базой данных выполняются, либо ничего не происходит. Гарантия атомарности предотвращает частичное обновление базы данных, что может вызвать большие проблемы, чем полный отказ от всей серии. Другими словами, атомарность означает неделимость и несводимость.

О программировании:

В параллельном программировании операция (или набор операций) является атомарной, линеаризуемой, неделимой или непрерывной, если остальной части системы кажется, что она происходит мгновенно. Атомарность - это гарантия изоляции от параллельных процессов. Кроме того, атомарные операции обычно имеют определение «успешно или неудачно» - они либо успешно изменяют состояние системы, либо не имеют видимого эффекта.

Я видел, как слово транзакция чаще использовалось для баз данных и операция в программировании, особенно в программировании на уровне ядра.

person Jean    schedule 27.03.2013