Изменения

Перейти к: навигация, поиск

Общий порядок сообщений

1995 байт добавлено, 19:04, 4 сентября 2022
м
rollbackEdits.php mass rollback
[[Категория: Параллельное программирование]]
'''Полный В системах, которые отсылают одно сообщение нескольким процессам, могут обнаружиться неприятные спецэффекты даже если не нарушен синхронный порядок''' : [[Файл:distributed-total-order- wrong.png|400px]] Проблема в том, что в исходной модели нет операции "отправить сообщение нескольким получателям" и на самом деле $P$ и $S$ отправляют два независимых сообщения двум разным процессам. Расширим модель: введём для любых сообщения вместо обычного события $rcv(m)$ события $rcv_p(m)$ — процесс $p$ получил событие $m$ (определено для всех $p$ для broadcast-сообщений и только для некоторых $p$ в случае multicast/unicast).{{Определение|definition=В системе с broadcast/multicast-сообщениями имеется ''x'общий порядок' и ''(total order), если не существует двух сообщений $x$, $y'' $ и любых двух потоков ''$P'' и ''$, $Q'' если ''$ таких, что сообщения были приняты в этих потоках в разном порядке: $rcv_P(x'' принято ''P'' перед '') < rcv_P(y) \land rcv_Q(y'') < rcv_Q(x)$.}}Если у нас только unicast-сообщения, то ''y'' не может быть принято перед ''x'' общий порядок тривиально выполняется даже в асинхронном порядке. В каком-то смысле гарантирование общего порядка для broadcast сообщений похоже на задачу взаимного исключения: отправитель вошёл в ''Q''критическую секцию, отправил всем остальным сообщение через FIFO-канал, снял критическую секцию. Например, можно решать [[Централизованный алгоритм взаимного исключения|централизованным алгоритмом]].
1632
правки

Навигация