Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Демкин_Экзамен.doc
Скачиваний:
11
Добавлен:
26.11.2018
Размер:
1.2 Mб
Скачать
  1. Что такое оптимистическое и пессимистическое блокирование? в каких случаях какое предпочтительнее? какие еще виды блокирования вы знаете?

Оптимистическое блокирование (optimistic locking) - стратегия блокирования набора данных, при которой раздел, содержащий изменяемую запись, блокируется только на время внесения изменений в запись программой, но не пользователем.

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

Пессимистическое блокирование (pessimistic locking) - стратегия блокирования набора данных, при которой раздел, содержащий изменяемую запись, блокируется на все время внесения изменений в запись пользователем и не доступна для редактирования другим пользователям.

Пессимистическая блокировка, когда вы блокируете запись для вашего исключительного использования, пока вы не закончите работу с ним. Это гораздо лучше, чем целостность оптимистической блокировки, но требует, чтобы вы были осторожны в своих проектирования приложений, чтобы избежать тупиков. Чтобы использовать пессимистический замок нужно либо прямое соединение с базой данных (что обычно случается в два уровня приложений клиент-сервер) или внешне доступна идентификатор транзакции, который может быть использован независимо от способа подключения.

  1. Что такое программная транзакционная память (stm)? какие качества имеют программы, которые ее используют?

STM

STM является самым высокоуровнёвым и современным методом синхронизации. Идея впервые появилась в 1986 и окончательно трансформировалась в современный STM в 1995–м.

Суть метода транзакций заключается в том, что изменения данных не станут видны другим нитям до тех пор, пока не будет выполнен коммит (commit). После коммита система пытается применить сделанные изменения к общему участку памяти. Если сделать это не удаётся (например, если кто–то другой тоже сделал коммит), производится откат до начального состояния и повторная попытка (retry).

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

Программы использующие STM избавлены от проблемы мертвых блокировок

  1. РАСШИФРУЙТЕ АББРЕВИАТУРУ ACID В ПРИМЕНЕНИИ К СИСТЕМНОМУ ПРОГРАММИРОВАНИЮ И КРАТКО ОХАРАКТЕРИЗУЙТЕ ЗНАЧЕНИЕ КАЖДОГО ИЗ СЛОВ. КАКАЯ ИЗ БУКВ АББРЕВИАТУРЫ НЕ ПРИМЕНИМА, КОГДА РЕЧЬ ИДЕТ О ПРОГРАММНОЙ ТРАНЗАКЦИОННОЙ ПАМЯТИ (STM)?

В информатике, акроним ACID описывает требования к транзакционной системе (например, к СУБД), обеспечивающие наиболее надёжную и предсказуемую её работу.

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

[править]

Consistency — Согласованность

Одно из самых сложных и неоднозначных свойств из четвёрки ACID. В соответствии с этим требованием, система находится в согласованном состоянии до начала транзакции и должна остаться в согласованном состоянии после завершения транзакции. Не нужно путать требование согласованности с требованиями целостности (integrity). Последние правила являются более узкими и, во многом, специфичны для реляционных СУБД: есть требования целостности типов (domain integrity), целостности ссылок (referential integrity), целостности сущностей (entity integrity), которые не могут быть нарушены физически в силу особенностей реализации системы.

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

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

[править]

Isolation — Изолированность

См. также: Уровни изолированности транзакций.

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

[править]

Durability — Долговечность

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

Скорее всего термин долговечность не применим к прогаммной транзакционной памяти, т. к. при ее использовании нет гарантий что в случае системного сбоя, проблем с электричеством, атомной войны, экзамена по Бане и т. д. Данные не потеряются