Логические часы Лампорта — различия между версиями
м (переименовал «Параллельное программирование: Логические часы Лампорта» в «Логические часы Лампорта») |
м (rollbackEdits.php mass rollback) |
||
(не показано 6 промежуточных версий 4 участников) | |||
Строка 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$ из множества событий распределенных систем (внутреннее событие, событие отправки сообщения и событие приема сообщения) в множество неотрицательных целых чисел. |
− | Если ''a'' предшествует ''b'', то логическое время часов Лампорта события ''a'' меньше логического времени события ''b'' | + | |
+ | У каждого процесса заводится счётчик (исходное значение неважно и может даже отличаться в разных потоках). | ||
+ | Правила: | ||
+ | |||
+ | * счётчик увеличивается перед каждым внутренним событием процесса; | ||
+ | * при отправке сообщения значение счётчика увеличивается и прикрепляется к сообщению; | ||
+ | * при получении сообщения значение счётчика процесса-получателя выставляется в максимум текущего и полученного значения и увеличивается на 1. | ||
+ | |||
+ | Значением вышеупомянутой целочисленной функции на событии является значение счётчика, принадлежащей тому же потоку, что и событие. Стоит заметить, что логическое время не уникально в пределах всей системы, а уникально только в рамках своего потока. | ||
+ | |||
+ | Оказывается, что если в распределенной системе ввести [[Частичный порядок|частичный порядок предшествования на событиях]], то имеет место следующее утверждение: | ||
+ | :Если ''a'' предшествует ''b'', то логическое время часов Лампорта события ''a'' меньше логического времени события ''b'' (обратное, вообще говоря, не верно). |
Текущая версия на 19:30, 4 сентября 2022
Определение: |
Логические часы — это функция $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 (обратное, вообще говоря, не верно).