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

В Информатика, то случилось раньше связь (обозначается: ) - это отношение между результатом двух событий, так что если одно событие должно произойти до другого, результат должен отражать это, даже если эти события в действительности выполняются не по порядку (обычно для оптимизации потока программы). Это включает заказ события, основанные на потенциале причинно-следственная связь пар событий в параллельной системе, особенно асинхронный распределенные системы. Его сформулировал Лесли Лэмпорт.[1] В частности, в Java случается раньше Отношение является гарантией того, что память, в которую записывается оператор A, видна оператору B, то есть этот оператор A завершает свою запись до того, как оператор B начинает чтение.[1]

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

  • Если события и происходят в одном процессе, если наступление события предшествовало наступлению события .
  • Если событие отправка сообщения и события получение сообщения, отправленного в случае , .

Если существуют другие причинно-следственные связи между событиями в данной системе, например, между созданием процесса и его первым событием, эти отношения также добавляются в определение.

Как и все строгие частичные заказы, отношение "произошло до" переходный, иррефлексивный и антисимметричный, то есть:

  • , если и , тогда (транзитивность). Это означает, что для любых трех событий , если случилось раньше , и случилось раньше , тогда должно было случиться раньше .
  • (нерефлексивность). Это означает, что перед собой не может произойти никакое событие.
  • куда , если тогда (антисимметрия). Это означает, что для любых двух различных событий , если случилось раньше тогда не могло случиться раньше .

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

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

Рекомендации

  1. ^ Лэмпорт, Лесли (1978). «Время, часы и порядок событий в распределенной системе», Коммуникации ACM, 21(7), 558-565.