Общий порядок сообщений — различия между версиями
Yeputons (обсуждение | вклад) м (Yeputons переименовал страницу Total order в Общий порядок сообщений) |
Yeputons (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
[[Категория: Параллельное программирование]] | [[Категория: Параллельное программирование]] | ||
− | + | В системах, которые отсылают одно сообщение нескольким процессам, могут обнаружиться неприятные спецэффекты даже если не нарушен синхронный порядок: | |
+ | [[Файл:distributed-total-order-wrong.png|400px] | ||
+ | |||
+ | Проблема в том, что в исходной модели нет операции "отправить сообщение нескольким получателям" и на самом деле $P$ и $S$ отправляют два независимых сообщения двум разным процессам. | ||
+ | |||
+ | Расширим модель: введём для сообщения вместо обычного события $rcv(m)$ события $rcv_p(m)$ — процесс $p$ получил событие $m$ (определено для всех $p$ для broadcast-сообщений и только для некоторых $p$ в случае multicast/unicast). | ||
+ | {{Определение | ||
+ | |definition= | ||
+ | В системе с broadcast/multicast-сообщениями имеется '''полный порядок''', если не существует двух сообщений $x$, $y$ и двух потоков $P$, $Q$ таких, что сообщения были приняты в этих потоках в разном порядке: $rcv_P(x) < rcv_P(y) \land rcv_Q(y) < rcv_Q(x)$. | ||
+ | }} | ||
+ | Если у нас только unicast-сообщения, то полный порядок тривиально выполняется даже в асинхронном порядке. |
Версия 10:51, 3 июня 2019
В системах, которые отсылают одно сообщение нескольким процессам, могут обнаружиться неприятные спецэффекты даже если не нарушен синхронный порядок: [[Файл:distributed-total-order-wrong.png|400px]
Проблема в том, что в исходной модели нет операции "отправить сообщение нескольким получателям" и на самом деле $P$ и $S$ отправляют два независимых сообщения двум разным процессам.
Расширим модель: введём для сообщения вместо обычного события $rcv(m)$ события $rcv_p(m)$ — процесс $p$ получил событие $m$ (определено для всех $p$ для broadcast-сообщений и только для некоторых $p$ в случае multicast/unicast).
Определение: |
В системе с broadcast/multicast-сообщениями имеется полный порядок, если не существует двух сообщений $x$, $y$ и двух потоков $P$, $Q$ таких, что сообщения были приняты в этих потоках в разном порядке: $rcv_P(x) < rcv_P(y) \land rcv_Q(y) < rcv_Q(x)$. |
Если у нас только unicast-сообщения, то полный порядок тривиально выполняется даже в асинхронном порядке.