Часы с прямой зависимостью — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
 
(не показана 1 промежуточная версия 1 участника)
Строка 1: Строка 1:
 
[[Категория: Параллельное программирование]]
 
[[Категория: Параллельное программирование]]
'''Логические часы с прямой зависимостью''' ''(direct dependency)'' - функция из множества событий (прием/посылка сообщений) в вектор из целых чисел.
+
'''Логические часы с прямой зависимостью''' ''(direct dependency)'' - функция из множества событий распределенных систем (внутреннее событие, событие отправки сообщения и событие приема сообщения) в вектор из целых чисел.
* Каждый поток имеет целочисленный ''n''-мерный вектор (''n'' – количество потоков), проинициализированный нулями.
+
 
* Перед посылкой/принятием сообщения, поток увеличивает на единицу свою компоненту вектора.
+
* Каждый поток имеет целочисленный ''n''-мерный вектор (''n'' – количество потоков), проинициализированный нулями;
* При посылке сообщения к нему отправляющий поток добавляет свою компоненту вектора, а при приеме сообщения обновляем путем выбора максимума только компоненты, отвечающие отсылающему и принимающему процессам.
+
* В случае любого события, поток увеличивает на единицу свою компоненту вектора;
 +
* При посылке сообщения от первого потока ко второму, отправляющий поток отправляет свою компоненту вектора, а при приеме сообщения второй поток обновляет свой вектор путем выбора максимума только у той компоненты вектора, которая была отправлена (при этом нельзя забывать про инкремент из предыдущего пункта, он делается перед выбором максимумов).
  
 
В отличие от [[Векторные часы|векторных часов]]:  
 
В отличие от [[Векторные часы|векторных часов]]:  

Текущая версия на 17:41, 9 марта 2018

Логические часы с прямой зависимостью (direct dependency) - функция из множества событий распределенных систем (внутреннее событие, событие отправки сообщения и событие приема сообщения) в вектор из целых чисел.

  • Каждый поток имеет целочисленный n-мерный вектор (n – количество потоков), проинициализированный нулями;
  • В случае любого события, поток увеличивает на единицу свою компоненту вектора;
  • При посылке сообщения от первого потока ко второму, отправляющий поток отправляет свою компоненту вектора, а при приеме сообщения второй поток обновляет свой вектор путем выбора максимума только у той компоненты вектора, которая была отправлена (при этом нельзя забывать про инкремент из предыдущего пункта, он делается перед выбором максимумов).

В отличие от векторных часов:

  • при посылке сообщения передаем только свою компоненту вектора;
  • при приеме сообщения обновляем путем выбора максимума только компоненты, отвечающие отсылающему и принимающему процессам;

Оказывается, что если ввести частичный порядок предшествования на событиях несколько иным образом (потребовать прямую зависимость), то имеет место следующее утверждение:

a предшествует b, тогда и только тогда, когда логическое время часов с прямой зависимостью события a меньше логического времени события b (a.v[a.p] ≤ b.v[a.p], где a.p – номер процесса, в котором происходит событие a).

Требование прямой зависимости звучит следующим образом: между событиями a (процесс u) и b (процесс v) процесс u передал процессу v сообщение, процесс v его принял. Если говорить более формально, при транзитивном замыкании, упомянутом в определении частичного порядка предшествования, первое правило можно использовать только один раз.