【ランポートクロック】
ランポートクロック とは?
最終更新:
💡 因果的な順序を保って、出来事に番号を付ける
分散システムで、各プロセスのカウンタにより出来事へ論理時刻を付ける仕組み。同じプロセス内の順序とメッセージを通じた因果的な順序を保つが、実時刻やすべての因果関係は分からない。
📌 このページのポイント
ランポートクロックって何? 時計の一種なの?
どうやって数えるの?
整数カウンタを0から始める例では、通常のイベントで+1する。送信もイベントとして数え、その値をメッセージに添える。受信イベントの値は、自分の現在値と受信値の大きい方に1を足すんだ。受信をさらに別の+1で二重に数えないようにしよう。
それでどんな順番が分かるの?
happens-beforeという因果的な順序を保つよ。同じプロセス内でaの後にbが起きた場合、aが送信でbがその受信の場合、さらにそのつながりをたどれる場合をa→bと書く。このとき必ずC(a) < C(b)になるんだ。
C(a)が小さければ、aが先に起きたって言えるの?
逆は成り立たないよ。数字が小さくても、メッセージなどのつながりがなく、因果的には並行かもしれない。ここでの並行は、壁の時計で同じ瞬間だったという意味ではないんだ。カウンタだけで実時間の前後や経過秒数は判断できないよ。
同じ数字が付いたら、並べられないの?
論理時刻が同じ場合に、プロセスIDの決めた順序で比べれば全順序を作れるよ。この順序はa→bに矛盾しないが、並行な出来事に付けた順は規則によるもの。実際の因果関係が増えたわけではないんだ。因果関係そのものを詳しく調べるには、より多くの情報を持つ方式が必要だね。
まとめ:ざっくりこれだけ覚えればOK!
「ランポートクロック」って出てきたら「因果的な順序を保つよう、出来事に数字を付ける論理時計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Lamport clock(Lamport timestamp)」 = ランポートの論理時計
💬 レスリー・ランポートが1978年の論文「Time, Clocks, and the Ordering of Events in a Distributed System」で提案したから、この名前だよ