Часы с прямой зависимостью — различия между версиями
Ulyantsev (обсуждение | вклад) |
м (rollbackEdits.php mass rollback) |
||
(не показаны 4 промежуточные версии 4 участников) | |||
Строка 1: | Строка 1: | ||
[[Категория: Параллельное программирование]] | [[Категория: Параллельное программирование]] | ||
− | '''Логические часы с прямой зависимостью''' ''(direct dependency)'' - функция из множества событий ( | + | '''Логические часы с прямой зависимостью''' ''(direct dependency)'' - функция из множества событий распределенных систем (внутреннее событие, событие отправки сообщения и событие приема сообщения) в вектор из целых чисел. |
− | |||
− | |||
− | |||
− | В отличие от [[ | + | * Каждый поток имеет целочисленный ''n''-мерный вектор (''n'' – количество потоков), проинициализированный нулями; |
+ | * В случае любого события, поток увеличивает на единицу свою компоненту вектора; | ||
+ | * При посылке сообщения от первого потока ко второму, отправляющий поток отправляет свою компоненту вектора, а при приеме сообщения второй поток обновляет свой вектор путем выбора максимума только у той компоненты вектора, которая была отправлена (при этом нельзя забывать про инкремент из предыдущего пункта, он делается перед выбором максимумов). | ||
+ | |||
+ | В отличие от [[Векторные часы|векторных часов]]: | ||
*при посылке сообщения передаем только свою компоненту вектора; | *при посылке сообщения передаем только свою компоненту вектора; | ||
*при приеме сообщения обновляем путем выбора максимума только компоненты, отвечающие отсылающему и принимающему процессам; | *при приеме сообщения обновляем путем выбора максимума только компоненты, отвечающие отсылающему и принимающему процессам; | ||
− | Оказывается, что если ввести [[ | + | Оказывается, что если ввести [[Частичный порядок|частичный порядок]] предшествования на событиях несколько иным образом (потребовать прямую зависимость), то имеет место следующее утверждение: |
− | :''a'' предшествует ''b'', тогда и только тогда, когда логическое время часов с прямой зависимостью события ''a'' меньше логического времени события ''b'' (''a.v[a.p] | + | :''a'' предшествует ''b'', тогда и только тогда, когда логическое время часов с прямой зависимостью события ''a'' меньше логического времени события ''b'' (''a.v[a.p] ≤ b.v[a.p]'', где ''a.p'' – номер процесса, в котором происходит событие ''a''). |
− | Требование '''прямой зависимости''' звучит следующим образом: между событиями ''a'' (процесс ''u'') и ''b'' (процесс ''v'') процесс u передал процессу ''v'' сообщение, процесс ''v'' его принял. Если говорить более формально, при транзитивном замыкании, упомянутом в определении частичного порядка предшествования, первое правило можно использовать только один раз. | + | Требование '''прямой зависимости''' звучит следующим образом: между событиями ''a'' (процесс ''u'') и ''b'' (процесс ''v'') процесс ''u'' передал процессу ''v'' сообщение, процесс ''v'' его принял. Если говорить более формально, при транзитивном замыкании, упомянутом в определении частичного порядка предшествования, первое правило можно использовать только один раз. |
Текущая версия на 19:37, 4 сентября 2022
Логические часы с прямой зависимостью (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 его принял. Если говорить более формально, при транзитивном замыкании, упомянутом в определении частичного порядка предшествования, первое правило можно использовать только один раз.