Алгоритм Лампорта — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
[[Категория: Параллельное программирование]]
 
[[Категория: Параллельное программирование]]
Алгоритм организует полный порядок на сообщениях.
+
Алгоритм организует [[общий порядок сообщений]].
Модифицируем [[Алгоритм Лампорта взаимного исключения|алгоритм Лампорта взаимного исключения]]. Будем предполагать FIFO-порядок сообщений. Также будем предполагать, что сообщения транслируются всем процессам. Каждый процесс содержит логические часы и очередь отправленных сообщений.
 
  
Алгоритм действует по следующим правилам:
+
Модифицируем [[Алгоритм Лампорта взаимного исключения|алгоритм Лампорта взаимного исключения]]. Будем предполагать FIFO-порядок сообщений. Также будем предполагать, что сообщения транслируются всем процессам (для multicast-сообщений это неэффективно, потому что придётся отсылать их всем и фильтровать на стороне получателя). Каждый процесс содержит логические часы и очередь отправленных сообщений.
# Чтобы отправить сообщение процесс транслирует свое время всем остальных (шаг аналогичен запросу на вход в критическую секцию)
+
 
# При приеме сообщения оно сохраняется вместе со временем и отправляется подтверждение, также помеченное временем
+
Алгоритм действует по следующим правилам (на лекции и в Garg они не очень подробно разобраны, тут дописано):
# Сообщение может быть доставлено процессу, если от всех остальных потоков получены сообщения с большей временной меткой (шаг аналогичен работе критической секции)
+
# Чтобы отправить сообщение, процесс транслирует сообщение и свое время всем процессам, включая себя (шаг аналогичен запросу на вход в критическую секцию)
 +
# При приеме сообщения оно:
 +
#* Сохраняется вместе со временем
 +
#* Отправляется подтверждение инициатору, также помеченное временем (шаг аналогичен подтверждению запроса)
 +
# Когда инициатор получает все подтверждения и у его broadcast-сообщения минимальное время из известных, можно разослать всем подтверждение обработки этого сообщения, после чего процессы его обработают и удалят из очереди (шаг аналогичен работе и отпусканию критической секции).
 +
 
 +
Итого $3(n-1)$ сообщений на каждый broadcast (не обсуждалось на лекции или в книжке, но вроде так).

Версия 11:10, 3 июня 2019

Алгоритм организует общий порядок сообщений.

Модифицируем алгоритм Лампорта взаимного исключения. Будем предполагать FIFO-порядок сообщений. Также будем предполагать, что сообщения транслируются всем процессам (для multicast-сообщений это неэффективно, потому что придётся отсылать их всем и фильтровать на стороне получателя). Каждый процесс содержит логические часы и очередь отправленных сообщений.

Алгоритм действует по следующим правилам (на лекции и в Garg они не очень подробно разобраны, тут дописано):

  1. Чтобы отправить сообщение, процесс транслирует сообщение и свое время всем процессам, включая себя (шаг аналогичен запросу на вход в критическую секцию)
  2. При приеме сообщения оно:
    • Сохраняется вместе со временем
    • Отправляется подтверждение инициатору, также помеченное временем (шаг аналогичен подтверждению запроса)
  3. Когда инициатор получает все подтверждения и у его broadcast-сообщения минимальное время из известных, можно разослать всем подтверждение обработки этого сообщения, после чего процессы его обработают и удалят из очереди (шаг аналогичен работе и отпусканию критической секции).

Итого $3(n-1)$ сообщений на каждый broadcast (не обсуждалось на лекции или в книжке, но вроде так).