Логические часы Лампорта — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
[[Категория: Параллельное программирование]]
 
[[Категория: Параллельное программирование]]
'''Логическими часами Лампорта''' называется функция из множества событий распределенных систем (внутреннее событие, событие отправки сообщения и событие приема сообщения) в множество неотрицательных целых чисел.
 
  
Часы Лампорта присваивают каждому событию единственное число, монотонно увеличивая счётчик каждого процесса согласно следующим правилам:
+
{{Определение
 +
|id = logical_clock
 +
|definition =
 +
'''Логические часы''' — это функция $C(e) \colon E \to \mathbb R$ (из событий в числа) такая, что для любых двух событий $e$ и $f$: если $e \to f$ ($e$ [[Частичный порядок|произошло-до]] $f$), то $C(e) < C(f)$.
 +
}}
 +
 
 +
Следствие ''только в одну сторону''. В обратную сторону часы сделать нельзя, потому что на числах у нас полный порядок, а happens-before задаёт лишь частичный.
 +
 
 +
'''Логическими часами Лампорта''' называется конкретная реализация такой функции $C$ из множества событий распределенных систем (внутреннее событие, событие отправки сообщения и событие приема сообщения) в множество неотрицательных целых чисел.
 +
 
 +
У каждого процесса заводится счётчик (исходное значение неважно и может даже отличаться в разных потоках).
 +
Правила:
  
 
* счётчик увеличивается перед каждым внутренним событием процесса;
 
* счётчик увеличивается перед каждым внутренним событием процесса;
Строка 8: Строка 18:
 
* при получении сообщения значение счётчика процесса-получателя выставляется в максимум текущего и полученного значения и увеличивается на 1.
 
* при получении сообщения значение счётчика процесса-получателя выставляется в максимум текущего и полученного значения и увеличивается на 1.
  
Значением вышеупомянутой целочисленной функции на событии является значение переменной, принадлежащей тому же потоку, что и событие. Стоит заметить, что логическое время события не уникально (уникально только в рамках своего потока).
+
Значением вышеупомянутой целочисленной функции на событии является значение счётчика, принадлежащей тому же потоку, что и событие. Стоит заметить, что логическое время не уникально в пределах всей системы, а уникально только в рамках своего потока.
  
 
Оказывается, что если в распределенной системе ввести [[Частичный порядок|частичный порядок предшествования на событиях]], то имеет место следующее утверждение:
 
Оказывается, что если в распределенной системе ввести [[Частичный порядок|частичный порядок предшествования на событиях]], то имеет место следующее утверждение:
 
:Если ''a'' предшествует ''b'', то логическое время часов Лампорта события ''a'' меньше логического времени события ''b'' (обратное, вообще говоря, не верно).
 
:Если ''a'' предшествует ''b'', то логическое время часов Лампорта события ''a'' меньше логического времени события ''b'' (обратное, вообще говоря, не верно).

Версия 17:27, 2 июня 2019


Определение:
Логические часы — это функция $C(e) \colon E \to \mathbb R$ (из событий в числа) такая, что для любых двух событий $e$ и $f$: если $e \to f$ ($e$ произошло-до $f$), то $C(e) < C(f)$.


Следствие только в одну сторону. В обратную сторону часы сделать нельзя, потому что на числах у нас полный порядок, а happens-before задаёт лишь частичный.

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

У каждого процесса заводится счётчик (исходное значение неважно и может даже отличаться в разных потоках). Правила:

  • счётчик увеличивается перед каждым внутренним событием процесса;
  • при отправке сообщения значение счётчика увеличивается и прикрепляется к сообщению;
  • при получении сообщения значение счётчика процесса-получателя выставляется в максимум текущего и полученного значения и увеличивается на 1.

Значением вышеупомянутой целочисленной функции на событии является значение счётчика, принадлежащей тому же потоку, что и событие. Стоит заметить, что логическое время не уникально в пределах всей системы, а уникально только в рамках своего потока.

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

Если a предшествует b, то логическое время часов Лампорта события a меньше логического времени события b (обратное, вообще говоря, не верно).