Случилось-раньше

В информатике отношение « произошло раньше » (обозначается как ) — это отношение между результатом двух событий, так что если одно событие должно произойти до другого, результат должен это отражать, даже если эти события в действительности выполняются не по порядку (обычно для оптимизации потока программы). Это подразумевает упорядочивание событий на основе потенциальной причинно-следственной связи пар событий в параллельной системе, особенно в асинхронных распределенных системах . Оно было сформулировано Лесли Лэмпортом . [1] {\displaystyle \to \;}

Отношение «произошло раньше» формально определяется как наименее строгий частичный порядок событий, такой что:

  • Если события и происходят в одном и том же процессе, если возникновение события предшествовало возникновению события . а {\displaystyle а\;} б {\displaystyle б\;} а б {\displaystyle a\to b\;} а {\displaystyle а\;} б {\displaystyle б\;}
  • Если событие — это отправка сообщения, а событие — это получение сообщения, отправленного в событии , . а {\displaystyle а\;} б {\displaystyle б\;} а {\displaystyle а\;} а б {\displaystyle a\to b\;}

Если два события происходят в разных изолированных процессах (которые не обмениваются сообщениями напрямую или косвенно через сторонние процессы), то говорят, что эти два процесса являются параллельными, что не является ни тем , ни другим. [2] а б {\displaystyle a\to b} б а {\displaystyle b\to a}

Если существуют другие причинно-следственные связи между событиями в данной системе, например, между созданием процесса и его первым событием, эти связи также добавляются в определение. Например, в некоторых языках программирования, таких как Java, [3] C, C++ или Rust, ребро happen-before существует, если память, записанная оператором A, видна оператору B, то есть если оператор A завершает свою запись до того, как оператор B начинает свое чтение.

Как и все строгие частичные порядки, отношение «произошло раньше» является транзитивным , иррефлексивным (и, что бессодержательно, асимметричным ), то есть:

  • а , б , с {\displaystyle \forall a,b,c} , если и , то (транзитивность). Это означает, что для любых трёх событий , если произошло до , и произошло до , то должно было произойти до . а б {\displaystyle a\to b\;} б с {\displaystyle b\to c\;} а с {\displaystyle a\to c\;} а , б , с {\displaystyle а,б,в} а {\displaystyle а} б {\displaystyle б} б {\displaystyle б} с {\displaystyle с} а {\displaystyle а} с {\displaystyle с}
  • а , а а {\displaystyle \forall a,a\nrightarrow a} (иррефлексивность). Это означает, что никакое событие не может произойти раньше самого себя.
  • а , б , {\displaystyle \forall а,б,} если то (асимметрия). Это означает, что для любых двух событий , если произошло раньше , то не могло произойти раньше . а б {\displaystyle a\to b} б а {\displaystyle b\nrightarrow a} а , б {\displaystyle а,б} а {\displaystyle а} б {\displaystyle б} б {\displaystyle б} а {\displaystyle а}

Заметим, что свойство асимметрии напрямую следует из предыдущих свойств: от противного предположим, что имеем и . Тогда по транзитивности имеем что противоречит нерефлексивности. а , б , {\displaystyle \forall а,б,} а б {\displaystyle a\to b\;} б а {\displaystyle b\to a} а а , {\displaystyle а\к а,}

Процессы, составляющие распределенную систему, не имеют знаний об отношении «произошло-раньше», если они не используют логические часы , такие как часы Лампорта или векторные часы . Это позволяет разрабатывать алгоритмы для взаимного исключения и решать такие задачи, как отладка или оптимизация распределенных систем.

Смотрите также

Цитаты

  1. ^ Лэмпорт, Лесли (1978). «Время, часы и порядок событий в распределенной системе», Communications of the ACM , 21(7), 558-565.
  2. ^ "Распределенные системы 3-е издание (2017)". DISTRIBUTED-SYSTEMS.NET . Получено 2021-03-20 .
  3. ^ Гетц и др. 2006, стр. 339–342, §16.1.3 Модель памяти Java в 500 словах или меньше.

Ссылки

  • Goetz, Brian; Peierls, Tim; Bloch, Joshua; Bowbeer, Joseph; Holmes, David; Lea, Doug (2006). Java Concurrency in Practice. Addison Wesley. ISBN 0-321-34960-1.
Взято с "https://en.wikipedia.org/w/index.php?title=Произошло-раньше&oldid=1197656002"