Logický čas není fyzikální veličina (netiká v sekundách), ale diskretní číselný systém, který slouží k zachycení kauzálních závislostí (příčina → následek) mezi událostmi v distribuovaném systému.

Umožňuje nám odpovědět na otázku: “Stala se událost A před událostí B, nebo jsou nezávislé?” bez použití fyzických hodin.

[!important] Logický čas byl vymyšlen pouze proto, abychom dokázali strojově zachytit kauzální závislost.

Princip

Leslie Lamport definoval relaci “stalo se před” (happened-before), značenou $\to$.

Implementace

Abychom mohli relaci ‘Happened-Before’ prakticky využívat v algoritmech, potřebujeme událostem přiřadit číselná razítka (timestamps). Existují dva hlavní přístupy lišící se v přesnosti zachycení souběžnosti.

Lamportovy (skalární) hodiny

Každý proces $P_i$ udržuje čítač $C_i$.

  1. Před každou událostí: $C_i = C_i + 1$.
  2. Odeslání zprávy: Připojit timestamp $t = C_i$.
  3. Přijetí zprávy $(m, t)$: $C_j = \max(C_j, t) + 1$.

Klíčová vlastnost: $a \to b \implies C(a) < C(b)$.

Zásadní limitace: Implikace neplatí obráceně. Pokud $C(a) < C(b)$, nemůžeme říci, že $a$ kauzálně předchází $b$. Mohou být konkurentní (nezávislé). Lamportovy hodiny nedokáží detekovat souběžnost.

Vektorové hodiny (vector clocks)

Řeší limitaci skalárních hodin. Každý proces udržuje vektor $V$ o délce $N$ (počet procesů).

Pravidla aktualizace:

  1. Lokální událost na $P_i$: $V_i[i] = V_i[i] + 1$.
  2. Odeslání zprávy: Odeslat celý vektor $V$.
  3. Přijetí zprávy s vektorem $v$: Pro každé $k$, $V_i[k] = \max(V_i[k], v[k])$. Poté $V_i[i] = V_i[i] + 1$.

Síla vektorových hodin: Umožňují přesně určit vztah dvou událostí.

Image