Алгоритм Скина — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
[[Категория: Параллельное программирование]]
 
[[Категория: Параллельное программирование]]
'''Алгоритм Скина''' полного порядка сообщений. Используются [[Логические часы Лампорта|логические часы Лампорта]].
+
'''Алгоритм Скина'''<ref>https://doi.org/10.1109/TSE.1983.236608</ref> для организации [[Общий порядок сообщений|общего порядка сообщений]].
# Инициатор отправляет сообщение и время
+
Лучше, чем [[Алгоритм Лампорта]], потому что для multicast сообщений общается только с получателями, а не со всеми процессами системы.
# При приеме сообщения процесс помечает сообщение как недоставленное и отправляет свое время инициатору
 
# Когда инициатору вернулись все сообщения, он выбирает максимальное время и снова отправляет сообщение (уже финальную версию)
 
# При приеме финального сообщения оно помечается как доставленное и доставляется получателю, если оно имеет минимальное время в очереди сообщений
 
  
Полный порядок задается финальными временными метками.
+
Используются [[Логические часы Лампорта|логические часы Лампорта]].
 +
Ниже алгоритм расписан чуть подробнее, чем в Garg и на лекции, но вроде всё ещё верно.
 +
# Инициатор отправляет сообщение и своё время (''предварительное время сообщения'') всем получателям
 +
# При приеме сообщения процесс запоминает сообщение со времени и отправляет свое время инициатору
 +
# Когда инициатору вернулись все сообщения, он выбирает максимальное время из них и снова отправляет сообщение со временем (уже ''финальное'')
 +
# Получатель обрабатывает сообщение, если оно помечено как финальное и имеет минимальное финальное время среди всех известных получателю сообщений (и финальных, и нефинальных; иначе может получиться, что финализация сообщений произойдёт в разном порядке у разных получателей и нарушится общий порядок)
 +
 
 +
Полный порядок задается финальными временными метками. Финальные метки нужны, чтобы как-то зависеть от времени получателей.
 +
Доказательство на лекции и в Gaarg не приводилось.

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

Алгоритм Скина[1] для организации общего порядка сообщений. Лучше, чем Алгоритм Лампорта, потому что для multicast сообщений общается только с получателями, а не со всеми процессами системы.

Используются логические часы Лампорта. Ниже алгоритм расписан чуть подробнее, чем в Garg и на лекции, но вроде всё ещё верно.

  1. Инициатор отправляет сообщение и своё время (предварительное время сообщения) всем получателям
  2. При приеме сообщения процесс запоминает сообщение со времени и отправляет свое время инициатору
  3. Когда инициатору вернулись все сообщения, он выбирает максимальное время из них и снова отправляет сообщение со временем (уже финальное)
  4. Получатель обрабатывает сообщение, если оно помечено как финальное и имеет минимальное финальное время среди всех известных получателю сообщений (и финальных, и нефинальных; иначе может получиться, что финализация сообщений произойдёт в разном порядке у разных получателей и нарушится общий порядок)

Полный порядок задается финальными временными метками. Финальные метки нужны, чтобы как-то зависеть от времени получателей.

Доказательство на лекции и в Gaarg не приводилось.