92 Часть I. Обзор
смысле, существует два вида стратегий управления параллельными заданиями — опти-
мистические (optimistic) и пессимистические (pessimistic).
Предположим, что Мартину и Дейвиду позарез нужно редактировать файл Customer
одновременно. Используя схему оптимистического блокирования (optimistic locking), тот
и другой могут получить в свое распоряжение копии файла и свободно их править.
Завершая работу первым, Дейвид без проблем сохраняет изменения в основном файле.
Если в то же самое время записать данные в файл пытается и Мартин, система контроля
версий, обнаружив конфликт, должна запретить эту операцию и позволить Мартину
принять осмысленное решение по выходу из сложившейся ситуации. При реализации
стратегии пессимистического блокирования (pessimistic locking) первый пользователь, захва-
тивший файл, препятствует открытию файла всеми другими пользователями. Если в та-
ком случае более проворным окажется Мартин, Дейвид не сможет работать с файлом до
тех пор, пока тот не будет освобожден.
Стратегии удобно воспринимать следующим образом: оптимистическое блокирова-
ние дает возможность обнаруживать конфликты, в то время как пессимистическое по-
зволяет их предотвращать. В реальных системах контроля версий исходного программ-
ного кода применяются обе стратегии, хотя сегодня большинству разработчиков по нраву
модель оптимистического блокирования. (Некоторые довольно резонно утверждают, что
оптимистическое блокирование не является "блокированием" в привычном смысле сло-
ва, но, на наш взгляд, этот термин слишком удобен и широко распространен, чтобы его
можно было легко отвергнуть.)
Обоим подходам присущи как достоинства, так и недостатки. Изъян схемы пессими-
стического блокирования состоит в снижении степени параллелизма операций. Когда
Мартин работает с заблокированным файлом, всем остальным желающим (в частности,
Дейвиду) приходится ждать своей очереди. Если вам приходилось пользоваться система-
ми контроля версий, основанными на модели пессимистического блокирования, вы со-
гласитесь, что неопределенно долгое ожидание способно порой довести до бешенства.
В ситуации с корпоративными данными проблема еще более обостряется, поскольку ре-
дактируемые порции информации не позволяется даже считывать; что же говорить тогда
о возможности их совместного параллельного изменения!
Стратегия оптимистического блокирования предоставляет гораздо больше свободы,
так как блокировка удерживается только в течение периода фиксации изменений. Про-
блемы появляются при возникновении конфликтов версий данных. Каждый, кто обра-
щается к файлу после внесения изменений Дейвидом, должен проверить оставленную им
версию файла, определить, как осуществить слияние собственных результатов с редакци-
ей Дейвида, и зарегистрировать новую версию. Если речь идет об исходном программном
коде, все это не особенно трудно: во многих случаях системы контроля версий способны
осуществить слияние автоматически, а если по каким-либо причинам это невозможно,
они предлагают удобные средства поиска и воспроизведения внесенных исправлений.
Но выполнить слияние нескольких версий одной и той же порции бизнес-данных на-
много сложнее, поэтому зачастую проще поступиться затратами времени и сил и все на-
чать сначала.
Главное, что следует учитывать, осуществляя выбор между оптимистическим и пес-
симистическим блокированием, — это частота возникновения и степень опасности кон-
фликтов. Если конфликты относительно редки или их последствия незначительны,
обычно разумно предпочесть оптимистическую стратегию, поскольку она обеспечивает