Теорема Фишера-Линча-Патерсона (FLP) — различия между версиями
Yeputons (обсуждение | вклад) (→Доказательство) |
Yeputons (обсуждение | вклад) (→Модель) |
||
Строка 31: | Строка 31: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Шаг''' из одной конфигурации в другую — это | + | '''Шаг''' из одной конфигурации в другую — это приём какого-то сообщения процессом (событие) и последовавшие за этим внутренние действия процесса до следующего <code>receive()</code>. Эти действия ''однозначно'' определяются предыдущей конфигурацией и событием. |
}} | }} | ||
{{Определение | {{Определение |
Версия 16:07, 3 июня 2019
Теорема Фишера, Линча и Патерсона (FLP, 1985 год) невозможно достичь даже необоснованного консенсуса $N>2$ процессами даже на одном бите при следующих условиях:
- Алгоритм должен завершиться за конечное время.
- Один из узлов может отказать
- Система асинхронна
- Алгоритм должен быть детерминирован.
Если отказов нет, есть простой алгоритм. Если система синхронна, то есть консенсус в синхронных системах. Если разрешаем недетерминизм, то есть алгоритм Бен-Ора.
Содержание
Доказательство
Из презентации Р. Елизарова.
От противного: пусть есть такой алгоритм, тогда мы проанализируем варианты его исполнения, подстроим порядок доставки сообщений (без откладывания сообщений бесконечно далеко) и получим противоречие с нетривиальностью консенсуса.
Модель
Определение: |
Процесс — это детерминированный автомат, который может выполнять три операции:
|
Для доказательства от противного у нас есть такой алгоритм для процессов, что все они вызывают decided(value)
с одинаковым значением через конечное время, независимо от того, как система задерживает сообщения.
Определение: |
Конфигурация — это состояния всех процессов плюс все сообщения в пути (которые отправили, но ещё не доставили). |
В начальной конфигурация у каждого процесса может быть сколько угодно входных данных и даже своя программа.
Определение: |
Шаг из одной конфигурации в другую — это приём какого-то сообщения процессом (событие) и последовавшие за этим внутренние действия процесса до следующего receive() . Эти действия однозначно определяются предыдущей конфигурацией и событием. |
Определение: |
Исполнение — это бесконечная цепочка шагов из начальной конфигурации. Бесконечная, потому что процессы могут выполняться и после принятия решений. |
Определение: |
Отказавший процесс — это процесс, который делает только конечное количество шагов в исполнении. Такой в системе может быть максимум один (это более сильное условие, чем если может много процессов отказывать). |
Также гарантируется, что в любом исполнении любое сообщение, предназначенное не отказавшему процессу, обрабатывается через конечное число шагов.
Другими словами, сообщения не теряются.