1632
правки
Изменения
м
rollbackEdits.php mass rollback
=== Запоминание сообщений на стороне получателя ===
Когда красный процесс получает сообщение от белого процесса (без маркера), то процесс сохраняет его у себя.
После того, как все процессы стали красными''и получили маркеры от всех своих соседей'', надо взять их красные состояния и все полученные ими до этого момента сообщения.
Сообщения, полученные красным от красного, не запоминаются — они будут заново отправлены при восстановлении системы.
Если просто ждать, пока процессы станут красными, то можно потерять сообщение, если канал между двумя процессами очень сильно тормозит. Поэтому надо ждать именно прохождения всех маркеров.
=== Не FIFO ===
Не-FIFO можно свести к FIFO (см. билеты дальше), но это надо делать глобально (с начала времён), иначе можно потерять сообщения, отправленные до работы FIFO-алгоритма.
Как только белый процесс получил красное сообщение (либо же маркер, как и раньше), он инициирует изменение цвета и т.д. Однако это не решает проблему того, что белое сообщение может прибыть позже красного. Чтобы решить эту проблему, будем вместе с маркером отправлять общее (тотальное) число белых сообщений, отправленных соответствующим процессом через соответствующий канал на конкретный момент. Процесс-получатель отслеживает общее количество полученных белых сообщений и знает, что все белые сообщения будут получены, когда этот счет будет равен тотальному числу.