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