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