
298
Глава 3. Модульность, объекты и состояние
обязательно долж но в каждый момент находиться в непротиворечивом состоянии. Из-
за этого в современных многопроцессорных системах идея сериализаторов выте сняется
новыми подходами к управлению параллелизмом
49
.
Кроме того, проблемы с разделяемым состоянием возникают в больших распределен-
ных системах. Например, рассмотрим распределенную банковскую систему, в которой
отдельные местные банки поддерживают собственные значения баланса счетов и время
от времени сравнивают их со значениями, хранимыми в других местах. В такой системе
значение «баланс счета» не будет опр еделенным ни в какой момент, кроме как сразу по-
сле синхронизации. Если Петр вносит деньги на счет, который он делит с Павлом, когда
мы должны считать, что баланс измени лся, — когда меняется баланс в местном бан ке
или только по сле синхронизаци и? А если Павел обращается к счету через другую ветвь
системы, какие ограничения нужно наложить на банковскую систему, чтобы ее поведе-
ние сч италось «правильным»? Единственное, что може т иметь значение для определения
«правильности», — это поведение, которое Павел и Петр наблюдают по отдельности, и
состоя ние счета сразу после синхронизации. Вопросы о «настоящем» значении балан-
са или порядке событий между синхронизациями могут не и меть значения или даже
смысла
50
.
Общее в этих проблемах то, что синхронизация различных процессов, установление
общего состояния и управление порядком событий требуют взаимодействия процессов. В
сущности, любое понятие времени при управлении параллельными процессами должно
быть прочно привязано к взаимодействию процессов
51
. Любопытно, что похожая связ ь
между временем и обменом информацией возникает в теории относительности, где
скорость све та (самого быстрого сигнала, который можно использовать для синхро-
низации событий) служит универсальной константой, связывающей пространство и
время. Сложности, с которыми мы сталкиваемся при работе с временем и состоянием в
вычислительных моделях, могут на самом деле отражать фундаментальн у ю сложность
физического мира.
3.5. Потоки
Теперь у нас есть ясное понимание того, как присваивание может служить инстру-
ментом модел ирования, а также понятие о сложности проблем, связанных с ним. Пора
задать вопрос, нельзя ли организовать работу иначе и избежать части этих проблем.
49
Один из подходов, альтернативных сериализации, называется барьерная синхронизация (barrier
synchronization). Программист позволяет параллельным процессам выполняться как угодно, но устанавливает
определенные точки синхронизации («барьеры»), так что ни один процесс не может продолжаться, пока все они
не достигли барьера. Современные процессоры обладают машинными командами, которые позволяют програм-
мистам устанавливать точки синхронизации там, где требуется иметь непротиворечивое состояние. Например,
в Power PC
TM
имеются две предназначенные для этого команды: SYNC и EIEIO (Enforced In-Order Execution
of Input-Output, Гарантированно Последовательное Исполнение Ввода-Вывода).
50
Такая точка зрения может казаться странной, но при этом существуют системы, которые именно так и
работают. Изменения на счетах, связанных с кредитными картами, например, обычно поддерживаются отдельно
в каждой стране, а изменения в различных странах согласовываются время от времени. Таким образом, баланс
на счете может быть различным в различных странах.
51
Для распределенных систем эта точка зрения исследовалась Лэмпортом (Lamport 1978). Он показал, как
при помощи взаимодействия установить «глобальные часы», через которые можно управлять порядком событий
в распределенных системах.