{"id":2598,"date":"2025-06-06T09:28:13","date_gmt":"2025-06-06T09:28:13","guid":{"rendered":"https:\/\/diznr.com\/?p=2598"},"modified":"2025-06-06T09:28:13","modified_gmt":"2025-06-06T09:28:13","slug":"logical-clock-lamport-clock-and-vector-clock-in-distributed-system-logical-time-lamports-and-algorithm-vector","status":"publish","type":"post","link":"https:\/\/www.reilsolar.com\/pdf\/logical-clock-lamport-clock-and-vector-clock-in-distributed-system-logical-time-lamports-and-algorithm-vector\/","title":{"rendered":"Logical Clock: Lamport Clock and Vector Clock in Distributed System &#8211; Logical Time-Lamport&#8217;s and Vector Algorithm"},"content":{"rendered":"<p>Logical Clock: Lamport Clock and Vector Clock in Distributed System &#8211; Logical Time-Lamport&#8217;s and Vector Algorithm. Lampor&#8217;t Clock and Vector Clock With Algorithm in Distributed System.<\/p>\n<p>[fvplayer id=&#8221;79&#8243;]<\/p>\n<p><span style=\"color: #ffffff\">Logical Clock In Distributed System Lamport Logical Clock In Distributed System Difference Between Logical Clock And Vector Clock Advantages Of Vector Clock Over Lamport Clock Lamport Clocks And Vector Clocks Lamport&#8217;s And Vector Algorithm In Distributed System. Physical Clock In Distributed System Lamport Logical Clock Vs Vector Clock Global Clock In Distributed System Lamport Logical Clock Video Lecture Disadvantages Of Lamport Logical Clock Logical Time In Distributed System Lamport Clock Example Lamport Logical Clock Program In Python.<\/span><\/p>\n<h3 data-start=\"0\" data-end=\"77\"><strong data-start=\"2\" data-end=\"75\">Logical Clocks: Lamport Clock and Vector Clock in Distributed Systems<\/strong><\/h3>\n<p data-start=\"79\" data-end=\"259\">In <strong data-start=\"82\" data-end=\"105\">distributed systems<\/strong>, there is no global clock to keep track of events, so we use <strong data-start=\"167\" data-end=\"185\">logical clocks<\/strong> to maintain the ordering of events. Two widely used logical clocks are:<\/p>\n<ol data-start=\"260\" data-end=\"326\">\n<li data-start=\"260\" data-end=\"303\"><strong data-start=\"263\" data-end=\"301\">Lamport Timestamps (Lamport Clock)<\/strong><\/li>\n<li data-start=\"304\" data-end=\"326\"><strong data-start=\"307\" data-end=\"324\">Vector Clocks<\/strong><\/li>\n<\/ol>\n<p data-start=\"328\" data-end=\"382\">Let\u2019s dive into how they work and their differences.<\/p>\n<h3 data-start=\"389\" data-end=\"425\"><strong data-start=\"392\" data-end=\"423\">1. What is a Logical Clock?<\/strong><\/h3>\n<p data-start=\"426\" data-end=\"622\">A <strong data-start=\"428\" data-end=\"445\">logical clock<\/strong> is a mechanism to assign timestamps to events in a distributed system <strong data-start=\"516\" data-end=\"554\">without relying on physical clocks<\/strong>. It helps to <strong data-start=\"568\" data-end=\"592\">maintain event order<\/strong> across different processes.<\/p>\n<p data-start=\"624\" data-end=\"887\"><strong data-start=\"624\" data-end=\"666\">Two key conditions for logical clocks:<\/strong><br data-start=\"666\" data-end=\"669\" \/><strong data-start=\"671\" data-end=\"697\">Causal Order Condition<\/strong>: If an event <strong data-start=\"711\" data-end=\"716\">A<\/strong> happens before event <strong data-start=\"738\" data-end=\"743\">B<\/strong>, then <strong data-start=\"750\" data-end=\"781\">timestamp(A) &lt; timestamp(B)<\/strong>.<br data-start=\"782\" data-end=\"785\" \/><strong data-start=\"787\" data-end=\"802\">Consistency<\/strong>: The logical clock must be consistent with the actual order of events in a system.<\/p>\n<h3 data-start=\"894\" data-end=\"940\"><strong data-start=\"897\" data-end=\"938\">2. Lamport Clock (Lamport Timestamps)<\/strong><\/h3>\n<h3 data-start=\"942\" data-end=\"959\"><strong data-start=\"946\" data-end=\"957\">Concept<\/strong><\/h3>\n<p data-start=\"960\" data-end=\"1254\">\u00a0Proposed by <strong data-start=\"975\" data-end=\"1000\">Leslie Lamport (1978)<\/strong>, the <strong data-start=\"1006\" data-end=\"1023\">Lamport Clock<\/strong> provides a way to <strong data-start=\"1042\" data-end=\"1058\">order events<\/strong> in a distributed system.<br data-start=\"1083\" data-end=\"1086\" \/>\u00a0It does <strong data-start=\"1097\" data-end=\"1104\">not<\/strong> detect <strong data-start=\"1112\" data-end=\"1133\">concurrent events<\/strong>.<br data-start=\"1134\" data-end=\"1137\" \/>\u00a0Every process maintains a counter that is <strong data-start=\"1182\" data-end=\"1212\">incremented for each event<\/strong> and synchronized using message passing.<\/p>\n<h3 data-start=\"1261\" data-end=\"1305\"><strong data-start=\"1265\" data-end=\"1303\">Lamport&#8217;s Algorithm (Step-by-Step)<\/strong><\/h3>\n<h4 data-start=\"1307\" data-end=\"1336\"><strong data-start=\"1312\" data-end=\"1334\">1. Initialization:<\/strong><\/h4>\n<p data-start=\"1337\" data-end=\"1415\">Each process <strong data-start=\"1350\" data-end=\"1355\">P<\/strong> maintains a logical clock <strong data-start=\"1382\" data-end=\"1390\">L(P)<\/strong>, initialized to <strong data-start=\"1407\" data-end=\"1412\">0<\/strong>.<\/p>\n<h4 data-start=\"1417\" data-end=\"1447\"><strong data-start=\"1422\" data-end=\"1445\">2. Event Execution:<\/strong><\/h4>\n<p data-start=\"1448\" data-end=\"1520\">Whenever a process <strong data-start=\"1467\" data-end=\"1488\">executes an event<\/strong>, it <strong data-start=\"1493\" data-end=\"1517\">increments its clock<\/strong>:<\/p>\n<p><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">L(P)=L(P)+1L(P) = L(P) + 1<\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"mord mathnormal\">L<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">P<\/span><span class=\"mclose\">)<\/span><span class=\"mrel\">=<\/span><\/span><span class=\"base\"><span class=\"mord mathnormal\">L<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">P<\/span><span class=\"mclose\">)<\/span><span class=\"mbin\">+<\/span><\/span><span class=\"base\"><span class=\"mord\">1<\/span><\/span><\/span><\/span><\/span><\/p>\n<h4 data-start=\"1546\" data-end=\"1578\"><strong data-start=\"1551\" data-end=\"1576\">3. Sending a Message:<\/strong><\/h4>\n<p data-start=\"1579\" data-end=\"1697\">When a process <strong data-start=\"1594\" data-end=\"1615\">P sends a message<\/strong> to another process <strong data-start=\"1635\" data-end=\"1640\">Q<\/strong>, it <strong data-start=\"1645\" data-end=\"1679\">includes its current timestamp<\/strong> in the message:<\/p>\n<p><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">M(T)=L(P)M(T) = L(P)<\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"mord mathnormal\">M<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">T<\/span><span class=\"mclose\">)<\/span><span class=\"mrel\">=<\/span><\/span><span class=\"base\"><span class=\"mord mathnormal\">L<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">P<\/span><span class=\"mclose\">)<\/span><\/span><\/span><\/span><\/span><\/p>\n<h4 data-start=\"1719\" data-end=\"1753\"><strong data-start=\"1724\" data-end=\"1751\">4. Receiving a Message:<\/strong><\/h4>\n<p data-start=\"1754\" data-end=\"1851\">When process <strong data-start=\"1767\" data-end=\"1772\">Q<\/strong> receives a message <strong data-start=\"1792\" data-end=\"1800\">M(T)<\/strong> from process <strong data-start=\"1814\" data-end=\"1819\">P<\/strong>, it <strong data-start=\"1824\" data-end=\"1845\">updates its clock<\/strong> as:<\/p>\n<p><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">L(Q)=max\u2061(L(Q),M(T))+1L(Q) = \\max(L(Q), M(T)) + 1<\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"mord mathnormal\">L<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">Q<\/span><span class=\"mclose\">)<\/span><span class=\"mrel\">=<\/span><\/span><span class=\"base\"><span class=\"mop\">max<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">L<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">Q<\/span><span class=\"mclose\">)<\/span><span class=\"mpunct\">,<\/span><span class=\"mord mathnormal\">M<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">T<\/span><span class=\"mclose\">))<\/span><span class=\"mbin\">+<\/span><\/span><span class=\"base\"><span class=\"mord\">1<\/span><\/span><\/span><\/span><\/span><\/p>\n<h3 data-start=\"1894\" data-end=\"1933\"><strong data-start=\"1898\" data-end=\"1931\">Example of Lamport Timestamps<\/strong><\/h3>\n<p data-start=\"1935\" data-end=\"2015\">Consider <strong data-start=\"1944\" data-end=\"1976\">three processes (P1, P2, P3)<\/strong> with events labeled as A, B, C, etc.<\/p>\n<h4 data-start=\"2017\" data-end=\"2040\"><strong data-start=\"2022\" data-end=\"2040\">Initial State:<\/strong><\/h4>\n<div class=\"overflow-x-auto contain-inline-size\">\n<table data-start=\"2041\" data-end=\"2148\">\n<thead data-start=\"2041\" data-end=\"2067\">\n<tr data-start=\"2041\" data-end=\"2067\">\n<th data-start=\"2041\" data-end=\"2049\">Event<\/th>\n<th data-start=\"2049\" data-end=\"2054\">P1<\/th>\n<th data-start=\"2054\" data-end=\"2059\">P2<\/th>\n<th data-start=\"2059\" data-end=\"2067\">P3<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"2095\" data-end=\"2148\">\n<tr data-start=\"2095\" data-end=\"2112\">\n<td>A<\/td>\n<td>1<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr data-start=\"2113\" data-end=\"2130\">\n<td>B<\/td>\n<td><\/td>\n<td>1<\/td>\n<td><\/td>\n<\/tr>\n<tr data-start=\"2131\" data-end=\"2148\">\n<td>C<\/td>\n<td><\/td>\n<td><\/td>\n<td>1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h4 data-start=\"2150\" data-end=\"2196\"><strong data-start=\"2155\" data-end=\"2194\">Message Passing &amp; Timestamp Updates<\/strong><\/h4>\n<p data-start=\"2198\" data-end=\"2234\"><strong data-start=\"2202\" data-end=\"2232\">P1 sends message M1 to P2:<\/strong><\/p>\n<ul data-start=\"2238\" data-end=\"2353\">\n<li data-start=\"2238\" data-end=\"2280\"><strong data-start=\"2240\" data-end=\"2255\">P1&#8217;s clock:<\/strong> 1 \u2192 <strong data-start=\"2260\" data-end=\"2274\">increments<\/strong> \u2192 2<\/li>\n<li data-start=\"2284\" data-end=\"2353\"><strong data-start=\"2286\" data-end=\"2310\">P2 receives message:<\/strong> Updates its clock: <strong data-start=\"2330\" data-end=\"2351\">max(2, 1) + 1 = 3<\/strong><\/li>\n<\/ul>\n<p data-start=\"2355\" data-end=\"2391\"><strong data-start=\"2359\" data-end=\"2389\">P2 sends message M2 to P3:<\/strong><\/p>\n<ul data-start=\"2395\" data-end=\"2510\">\n<li data-start=\"2395\" data-end=\"2437\"><strong data-start=\"2397\" data-end=\"2412\">P2&#8217;s clock:<\/strong> 3 \u2192 <strong data-start=\"2417\" data-end=\"2431\">increments<\/strong> \u2192 4<\/li>\n<li data-start=\"2441\" data-end=\"2510\"><strong data-start=\"2443\" data-end=\"2467\">P3 receives message:<\/strong> Updates its clock: <strong data-start=\"2487\" data-end=\"2508\">max(4, 1) + 1 = 5<\/strong><\/li>\n<\/ul>\n<p data-start=\"2512\" data-end=\"2533\"><strong data-start=\"2512\" data-end=\"2533\">Final Timestamps:<\/strong><\/p>\n<div class=\"overflow-x-auto contain-inline-size\">\n<table data-start=\"2534\" data-end=\"2645\">\n<thead data-start=\"2534\" data-end=\"2560\">\n<tr data-start=\"2534\" data-end=\"2560\">\n<th data-start=\"2534\" data-end=\"2542\">Event<\/th>\n<th data-start=\"2542\" data-end=\"2547\">P1<\/th>\n<th data-start=\"2547\" data-end=\"2552\">P2<\/th>\n<th data-start=\"2552\" data-end=\"2560\">P3<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"2588\" data-end=\"2645\">\n<tr data-start=\"2588\" data-end=\"2605\">\n<td>A<\/td>\n<td>1<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr data-start=\"2606\" data-end=\"2625\">\n<td>M1<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<td><\/td>\n<\/tr>\n<tr data-start=\"2626\" data-end=\"2645\">\n<td>M2<\/td>\n<td><\/td>\n<td>4<\/td>\n<td>5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p data-start=\"2647\" data-end=\"2789\"><strong data-start=\"2647\" data-end=\"2679\">Problem with Lamport Clocks:<\/strong><br data-start=\"2679\" data-end=\"2682\" \/>\u00a0Lamport timestamps <strong data-start=\"2703\" data-end=\"2733\">do not capture concurrency<\/strong> (i.e., whether two events happened at the same time).<\/p>\n<h3 data-start=\"2796\" data-end=\"2846\"><strong data-start=\"2799\" data-end=\"2844\">3. Vector Clocks (Improved Logical Clock)<\/strong><\/h3>\n<h3 data-start=\"2848\" data-end=\"2865\"><strong data-start=\"2852\" data-end=\"2863\">Concept<\/strong><\/h3>\n<p data-start=\"2866\" data-end=\"3077\"><strong data-start=\"2869\" data-end=\"2886\">Vector clocks<\/strong> solve the <strong data-start=\"2897\" data-end=\"2920\">concurrency problem<\/strong> by maintaining <strong data-start=\"2936\" data-end=\"2966\">a vector of logical clocks<\/strong>, one for each process.<br data-start=\"2989\" data-end=\"2992\" \/>\u00a0Each process maintains an <strong data-start=\"3021\" data-end=\"3053\">array (vector) of timestamps<\/strong> to track event order.<\/p>\n<h3 data-start=\"3084\" data-end=\"3131\"><strong data-start=\"3088\" data-end=\"3129\">Vector Clock Algorithm (Step-by-Step)<\/strong><\/h3>\n<h4 data-start=\"3133\" data-end=\"3162\"><strong data-start=\"3138\" data-end=\"3160\">1. Initialization:<\/strong><\/h4>\n<p data-start=\"3163\" data-end=\"3251\">Each process <strong data-start=\"3176\" data-end=\"3182\">P\u1d62<\/strong> maintains a <strong data-start=\"3195\" data-end=\"3217\">vector clock V(P\u1d62)<\/strong> initialized to <strong data-start=\"3233\" data-end=\"3248\">[0,0,&#8230;,0]<\/strong>.<\/p>\n<h4 data-start=\"3253\" data-end=\"3283\"><strong data-start=\"3258\" data-end=\"3281\">2. Event Execution:<\/strong><\/h4>\n<p data-start=\"3284\" data-end=\"3374\">Whenever a process <strong data-start=\"3303\" data-end=\"3324\">executes an event<\/strong>, it <strong data-start=\"3329\" data-end=\"3357\">increments its own clock<\/strong> in the vector:<\/p>\n<p><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">V(Pi)[i]=V(Pi)[i]+1V(P\u1d62)[i] = V(P\u1d62)[i] + 1<\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"mord mathnormal\">V<\/span><span class=\"mopen\">(<\/span><span class=\"mord\"><span class=\"mord mathnormal\">P<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">i<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mopen\">[<\/span><span class=\"mord mathnormal\">i<\/span><span class=\"mclose\">]<\/span><span class=\"mrel\">=<\/span><\/span><span class=\"base\"><span class=\"mord mathnormal\">V<\/span><span class=\"mopen\">(<\/span><span class=\"mord\"><span class=\"mord mathnormal\">P<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">i<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mopen\">[<\/span><span class=\"mord mathnormal\">i<\/span><span class=\"mclose\">]<\/span><span class=\"mbin\">+<\/span><\/span><span class=\"base\"><span class=\"mord\">1<\/span><\/span><\/span><\/span><\/span><\/p>\n<h4 data-start=\"3408\" data-end=\"3440\"><strong data-start=\"3413\" data-end=\"3438\">3. Sending a Message:<\/strong><\/h4>\n<p data-start=\"3441\" data-end=\"3566\">When a process <strong data-start=\"3456\" data-end=\"3478\">P\u1d62 sends a message<\/strong> to another process <strong data-start=\"3498\" data-end=\"3504\">P\u2c7c<\/strong>, it <strong data-start=\"3509\" data-end=\"3548\">attaches its vector timestamp V(P\u1d62)<\/strong> to the message.<\/p>\n<h4 data-start=\"3568\" data-end=\"3602\"><strong data-start=\"3573\" data-end=\"3600\">4. Receiving a Message:<\/strong><\/h4>\n<p data-start=\"3603\" data-end=\"3688\">When process <strong data-start=\"3616\" data-end=\"3622\">P\u2c7c<\/strong> receives a message from <strong data-start=\"3647\" data-end=\"3653\">P\u1d62<\/strong>, it updates its vector clock as:<\/p>\n<p><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">V(Pj)[k]=max\u2061(V(Pj)[k],V(Pi)[k])\u2200kV(P\u2c7c)[k] = \\max(V(P\u2c7c)[k], V(P\u1d62)[k]) \\quad \\forall k<\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"mord mathnormal\">V<\/span><span class=\"mopen\">(<\/span><span class=\"mord\"><span class=\"mord mathnormal\">P<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">j<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mopen\">[<\/span><span class=\"mord mathnormal\">k<\/span><span class=\"mclose\">]<\/span><span class=\"mrel\">=<\/span><\/span><span class=\"base\"><span class=\"mop\">max<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">V<\/span><span class=\"mopen\">(<\/span><span class=\"mord\"><span class=\"mord mathnormal\">P<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">j<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mopen\">[<\/span><span class=\"mord mathnormal\">k<\/span><span class=\"mclose\">]<\/span><span class=\"mpunct\">,<\/span><span class=\"mord mathnormal\">V<\/span><span class=\"mopen\">(<\/span><span class=\"mord\"><span class=\"mord mathnormal\">P<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">i<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mopen\">[<\/span><span class=\"mord mathnormal\">k<\/span><span class=\"mclose\">])<\/span><span class=\"mord\">\u2200<\/span><span class=\"mord mathnormal\">k<\/span><\/span><\/span><\/span><\/span><\/p>\n<p data-start=\"3749\" data-end=\"3789\">Then, it <strong data-start=\"3758\" data-end=\"3786\">increments its own entry<\/strong>:<\/p>\n<p><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">V(Pj)[j]=V(Pj)[j]+1V(P\u2c7c)[j] = V(P\u2c7c)[j] + 1<\/span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"mord mathnormal\">V<\/span><span class=\"mopen\">(<\/span><span class=\"mord\"><span class=\"mord mathnormal\">P<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">j<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mopen\">[<\/span><span class=\"mord mathnormal\">j<\/span><span class=\"mclose\">]<\/span><span class=\"mrel\">=<\/span><\/span><span class=\"base\"><span class=\"mord mathnormal\">V<\/span><span class=\"mopen\">(<\/span><span class=\"mord\"><span class=\"mord mathnormal\">P<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">j<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mopen\">[<\/span><span class=\"mord mathnormal\">j<\/span><span class=\"mclose\">]<\/span><span class=\"mbin\">+<\/span><\/span><span class=\"base\"><span class=\"mord\">1<\/span><\/span><\/span><\/span><\/span><\/p>\n<h3 data-start=\"3828\" data-end=\"3862\"><strong data-start=\"3832\" data-end=\"3860\">Example of Vector Clocks<\/strong><\/h3>\n<p data-start=\"3864\" data-end=\"3908\">Consider <strong data-start=\"3873\" data-end=\"3905\">three processes (P1, P2, P3)<\/strong>.<\/p>\n<h4 data-start=\"3910\" data-end=\"3935\"><strong data-start=\"3915\" data-end=\"3933\">Initial State:<\/strong><\/h4>\n<p data-start=\"3936\" data-end=\"3975\">Each process starts with <strong data-start=\"3961\" data-end=\"3972\">[0,0,0]<\/strong>.<\/p>\n<div class=\"overflow-x-auto contain-inline-size\">\n<table data-start=\"3977\" data-end=\"4114\">\n<thead data-start=\"3977\" data-end=\"4003\">\n<tr data-start=\"3977\" data-end=\"4003\">\n<th data-start=\"3977\" data-end=\"3985\">Event<\/th>\n<th data-start=\"3985\" data-end=\"3990\">P1<\/th>\n<th data-start=\"3990\" data-end=\"3995\">P2<\/th>\n<th data-start=\"3995\" data-end=\"4003\">P3<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"4031\" data-end=\"4114\">\n<tr data-start=\"4031\" data-end=\"4058\">\n<td>A<\/td>\n<td><strong data-start=\"4037\" data-end=\"4048\">[1,0,0]<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr data-start=\"4059\" data-end=\"4086\">\n<td>B<\/td>\n<td><\/td>\n<td><strong data-start=\"4068\" data-end=\"4079\">[0,1,0]<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr data-start=\"4087\" data-end=\"4114\">\n<td>C<\/td>\n<td><\/td>\n<td><\/td>\n<td><strong data-start=\"4099\" data-end=\"4110\">[0,0,1]<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h4 data-start=\"4116\" data-end=\"4159\"><strong data-start=\"4121\" data-end=\"4157\">Message Passing &amp; Vector Updates<\/strong><\/h4>\n<p data-start=\"4161\" data-end=\"4197\"><strong data-start=\"4165\" data-end=\"4195\">P1 sends message M1 to P2:<\/strong><\/p>\n<ul data-start=\"4201\" data-end=\"4301\">\n<li data-start=\"4201\" data-end=\"4255\"><strong data-start=\"4203\" data-end=\"4218\">P1\u2019s clock:<\/strong> <code data-start=\"4219\" data-end=\"4228\">[1,0,0]<\/code> \u2192 increments \u2192 <code data-start=\"4244\" data-end=\"4253\">[2,0,0]<\/code><\/li>\n<li data-start=\"4259\" data-end=\"4301\"><strong data-start=\"4261\" data-end=\"4280\">P2 receives M1:<\/strong> Updates: <code data-start=\"4290\" data-end=\"4299\">[2,1,0]<\/code><\/li>\n<\/ul>\n<p data-start=\"4303\" data-end=\"4339\"><strong data-start=\"4307\" data-end=\"4337\">P2 sends message M2 to P3:<\/strong><\/p>\n<ul data-start=\"4343\" data-end=\"4443\">\n<li data-start=\"4343\" data-end=\"4397\"><strong data-start=\"4345\" data-end=\"4360\">P2\u2019s clock:<\/strong> <code data-start=\"4361\" data-end=\"4370\">[2,1,0]<\/code> \u2192 increments \u2192 <code data-start=\"4386\" data-end=\"4395\">[2,2,0]<\/code><\/li>\n<li data-start=\"4401\" data-end=\"4443\"><strong data-start=\"4403\" data-end=\"4422\">P3 receives M2:<\/strong> Updates: <code data-start=\"4432\" data-end=\"4441\">[2,2,1]<\/code><\/li>\n<\/ul>\n<h4 data-start=\"4445\" data-end=\"4474\"><strong data-start=\"4450\" data-end=\"4474\">Final Vector Clocks:<\/strong><\/h4>\n<div class=\"overflow-x-auto contain-inline-size\">\n<table data-start=\"4475\" data-end=\"4636\">\n<thead data-start=\"4475\" data-end=\"4501\">\n<tr data-start=\"4475\" data-end=\"4501\">\n<th data-start=\"4475\" data-end=\"4483\">Event<\/th>\n<th data-start=\"4483\" data-end=\"4488\">P1<\/th>\n<th data-start=\"4488\" data-end=\"4493\">P2<\/th>\n<th data-start=\"4493\" data-end=\"4501\">P3<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"4529\" data-end=\"4636\">\n<tr data-start=\"4529\" data-end=\"4556\">\n<td>A<\/td>\n<td><strong data-start=\"4535\" data-end=\"4546\">[1,0,0]<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr data-start=\"4557\" data-end=\"4596\">\n<td>M1<\/td>\n<td><strong data-start=\"4564\" data-end=\"4575\">[2,0,0]<\/strong> \u2192 <strong data-start=\"4578\" data-end=\"4589\">[2,1,0]<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr data-start=\"4597\" data-end=\"4636\">\n<td>M2<\/td>\n<td><\/td>\n<td><strong data-start=\"4607\" data-end=\"4618\">[2,2,0]<\/strong> \u2192 <strong data-start=\"4621\" data-end=\"4632\">[2,2,1]<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p data-start=\"4638\" data-end=\"4845\"><strong data-start=\"4640\" data-end=\"4687\">Vector Clocks Preserve Causal Relationships<\/strong> \u2013 If <strong data-start=\"4693\" data-end=\"4708\">V(A) &lt; V(B)<\/strong>, then <strong data-start=\"4715\" data-end=\"4738\">A happened before B<\/strong>.<br data-start=\"4739\" data-end=\"4742\" \/><strong data-start=\"4744\" data-end=\"4771\">They Detect Concurrency<\/strong> \u2013 If <strong data-start=\"4777\" data-end=\"4811\">V(A) and V(B) are incomparable<\/strong>, the events are <strong data-start=\"4828\" data-end=\"4842\">concurrent<\/strong>.<\/p>\n<h3 data-start=\"4852\" data-end=\"4907\"><strong data-start=\"4855\" data-end=\"4905\">4. Differences: Lamport Clock vs. Vector Clock<\/strong><\/h3>\n<div class=\"overflow-x-auto contain-inline-size\">\n<table data-start=\"4909\" data-end=\"5224\">\n<thead data-start=\"4909\" data-end=\"4953\">\n<tr data-start=\"4909\" data-end=\"4953\">\n<th data-start=\"4909\" data-end=\"4919\">Feature<\/th>\n<th data-start=\"4919\" data-end=\"4935\">Lamport Clock<\/th>\n<th data-start=\"4935\" data-end=\"4953\">Vector Clock<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"4998\" data-end=\"5224\">\n<tr data-start=\"4998\" data-end=\"5040\">\n<td><strong data-start=\"5000\" data-end=\"5021\">Tracks Causality?<\/strong><\/td>\n<td>\u00a0No<\/td>\n<td>\u00a0Yes<\/td>\n<\/tr>\n<tr data-start=\"5041\" data-end=\"5092\">\n<td><strong data-start=\"5043\" data-end=\"5073\">Detects Concurrent Events?<\/strong><\/td>\n<td>\u00a0No<\/td>\n<td>\u00a0Yes<\/td>\n<\/tr>\n<tr data-start=\"5093\" data-end=\"5147\">\n<td><strong data-start=\"5095\" data-end=\"5107\">Overhead<\/strong><\/td>\n<td>Low<\/td>\n<td>High (stores entire vector)<\/td>\n<\/tr>\n<tr data-start=\"5148\" data-end=\"5224\">\n<td><strong data-start=\"5150\" data-end=\"5159\">Usage<\/strong><\/td>\n<td>Event ordering<\/td>\n<td>Causal consistency in distributed systems<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3 data-start=\"5231\" data-end=\"5253\"><strong data-start=\"5234\" data-end=\"5251\">5. Conclusion<\/strong><\/h3>\n<ul data-start=\"5255\" data-end=\"5663\">\n<li data-start=\"5255\" data-end=\"5354\"><strong data-start=\"5257\" data-end=\"5275\">Lamport Clocks<\/strong> provide a simple way to <strong data-start=\"5300\" data-end=\"5316\">order events<\/strong> but <strong data-start=\"5321\" data-end=\"5351\">fail to detect concurrency<\/strong>.<\/li>\n<li data-start=\"5355\" data-end=\"5460\"><strong data-start=\"5357\" data-end=\"5374\">Vector Clocks<\/strong> solve this problem by <strong data-start=\"5397\" data-end=\"5428\">tracking full event history<\/strong> at the cost of extra storage.<\/li>\n<li data-start=\"5461\" data-end=\"5558\"><strong data-start=\"5463\" data-end=\"5485\">Use Lamport Clocks<\/strong> when event ordering is enough (<strong data-start=\"5517\" data-end=\"5554\">e.g., distributed logs, messaging<\/strong>).<\/li>\n<li data-start=\"5559\" data-end=\"5663\"><strong data-start=\"5561\" data-end=\"5582\">Use Vector Clocks<\/strong> for <strong data-start=\"5587\" data-end=\"5609\">causality tracking<\/strong> (<strong data-start=\"5611\" data-end=\"5659\">e.g., distributed databases, version control<\/strong>).<\/li>\n<\/ul>\n<p data-start=\"5665\" data-end=\"5739\" data-is-last-node=\"\" data-is-only-node=\"\">Would you like a <strong data-start=\"5682\" data-end=\"5704\">real-world example<\/strong> or a <strong data-start=\"5710\" data-end=\"5735\">Python implementation<\/strong>?<\/p>\n<h3 data-start=\"5665\" data-end=\"5739\"><a href=\"https:\/\/www.cs.uic.edu\/~ajayk\/Chapter3.pdf\" target=\"_blank\" rel=\"noopener\">Logical Clock: Lamport Clock and Vector Clock in Distributed System &#8211; Logical Time-Lamport&#8217;s and Vector Algorithm<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/lamport.azurewebsites.net\/pubs\/time-clocks.pdf\" target=\"_blank\" rel=\"noopener\">Time, Clocks, and the Ordering of Events in a Distributed System<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/lass.cs.umass.edu\/~shenoy\/courses\/677content\/notes\/spring23\/Lec14_notes.pdf\" target=\"_blank\" rel=\"noopener\">Lecture 14: March 29 14.1 Logical and Vector Clocks<\/a><\/h3>\n<p data-start=\"0\" data-end=\"148\">In <strong data-start=\"3\" data-end=\"26\">distributed systems<\/strong>, where there is no global clock, <strong data-start=\"60\" data-end=\"78\">logical clocks<\/strong> are used to capture the <em data-start=\"103\" data-end=\"120\">order of events<\/em>. Two fundamental types are:<\/p>\n<hr data-start=\"150\" data-end=\"153\" \/>\n<h2 data-start=\"155\" data-end=\"189\">\u23f1\ufe0f <strong data-start=\"161\" data-end=\"189\">1. Lamport Logical Clock<\/strong><\/h2>\n<h3 data-start=\"191\" data-end=\"206\">\ud83d\udd39 Concept:<\/h3>\n<p data-start=\"207\" data-end=\"352\">Developed by <strong data-start=\"220\" data-end=\"238\">Leslie Lamport<\/strong>, it assigns a <strong data-start=\"253\" data-end=\"280\">single scalar timestamp<\/strong> to each event in a system to maintain a <strong data-start=\"321\" data-end=\"341\">partial ordering<\/strong> of events.<\/p>\n<h3 data-start=\"354\" data-end=\"367\">\ud83d\udd39 Rules:<\/h3>\n<ol data-start=\"368\" data-end=\"648\">\n<li data-start=\"368\" data-end=\"450\">\n<p data-start=\"371\" data-end=\"450\"><strong data-start=\"371\" data-end=\"397\">Increment before event<\/strong>: Each process increments its clock before any event.<\/p>\n<\/li>\n<li data-start=\"451\" data-end=\"537\">\n<p data-start=\"454\" data-end=\"537\"><strong data-start=\"454\" data-end=\"470\">Message send<\/strong>: When a process sends a message, it sends its clock value with it.<\/p>\n<\/li>\n<li data-start=\"538\" data-end=\"648\">\n<p data-start=\"541\" data-end=\"563\"><strong data-start=\"541\" data-end=\"560\">Message receive<\/strong>:<\/p>\n<ul data-start=\"567\" data-end=\"648\">\n<li data-start=\"567\" data-end=\"648\">\n<p data-start=\"569\" data-end=\"648\">The receiving process sets its clock to <code data-start=\"609\" data-end=\"647\">max(local clock, received clock) + 1<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 data-start=\"650\" data-end=\"668\">\ud83d\udd39 Limitation:<\/h3>\n<ul data-start=\"669\" data-end=\"808\">\n<li data-start=\"669\" data-end=\"763\">\n<p data-start=\"671\" data-end=\"763\">Can say <strong data-start=\"679\" data-end=\"704\">&#8220;A happened before B&#8221;<\/strong> (<code data-start=\"706\" data-end=\"713\">A \u2192 B<\/code>), but <strong data-start=\"720\" data-end=\"727\">not<\/strong> if two events are truly concurrent.<\/p>\n<\/li>\n<li data-start=\"764\" data-end=\"808\">\n<p data-start=\"766\" data-end=\"808\">Does <strong data-start=\"771\" data-end=\"796\">not capture causality<\/strong> completely.<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"810\" data-end=\"813\" \/>\n<h2 data-start=\"815\" data-end=\"840\">\ud83e\uddee <strong data-start=\"821\" data-end=\"840\">2. Vector Clock<\/strong><\/h2>\n<h3 data-start=\"842\" data-end=\"857\">\ud83d\udd39 Concept:<\/h3>\n<p data-start=\"858\" data-end=\"974\">A vector of counters (one per process), capturing <strong data-start=\"908\" data-end=\"932\">causal relationships<\/strong> and <strong data-start=\"937\" data-end=\"958\">concurrent events<\/strong> more precisely.<\/p>\n<h3 data-start=\"976\" data-end=\"996\">\ud83d\udd39 How it works:<\/h3>\n<p data-start=\"997\" data-end=\"1044\">Let <code data-start=\"1001\" data-end=\"1008\">VC[i]<\/code> be the vector clock of process <code data-start=\"1040\" data-end=\"1043\">i<\/code>.<\/p>\n<ol data-start=\"1046\" data-end=\"1298\">\n<li data-start=\"1046\" data-end=\"1092\">\n<p data-start=\"1049\" data-end=\"1092\"><strong data-start=\"1049\" data-end=\"1067\">Internal event<\/strong>: Increment <code data-start=\"1079\" data-end=\"1086\">VC[i]<\/code> by 1.<\/p>\n<\/li>\n<li data-start=\"1093\" data-end=\"1184\">\n<p data-start=\"1096\" data-end=\"1113\"><strong data-start=\"1096\" data-end=\"1110\">Send event<\/strong>:<\/p>\n<ul data-start=\"1117\" data-end=\"1184\">\n<li data-start=\"1117\" data-end=\"1138\">\n<p data-start=\"1119\" data-end=\"1138\">Increment <code data-start=\"1129\" data-end=\"1136\">VC[i]<\/code><\/p>\n<\/li>\n<li data-start=\"1142\" data-end=\"1184\">\n<p data-start=\"1144\" data-end=\"1184\">Send the entire vector with the message.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li data-start=\"1185\" data-end=\"1298\">\n<p data-start=\"1188\" data-end=\"1208\"><strong data-start=\"1188\" data-end=\"1205\">Receive event<\/strong>:<\/p>\n<ul data-start=\"1212\" data-end=\"1298\">\n<li data-start=\"1212\" data-end=\"1263\">\n<p data-start=\"1214\" data-end=\"1263\">Set <code data-start=\"1218\" data-end=\"1251\">VC[i] = max(VC[i], received[i])<\/code> for all i<\/p>\n<\/li>\n<li data-start=\"1267\" data-end=\"1298\">\n<p data-start=\"1269\" data-end=\"1298\">Then increment your own index<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 data-start=\"1300\" data-end=\"1318\">\ud83d\udd39 Comparison:<\/h3>\n<ul data-start=\"1319\" data-end=\"1455\">\n<li data-start=\"1319\" data-end=\"1455\">\n<p data-start=\"1321\" data-end=\"1344\">Two events <code data-start=\"1332\" data-end=\"1335\">A<\/code> and <code data-start=\"1340\" data-end=\"1343\">B<\/code>:<\/p>\n<ul data-start=\"1347\" data-end=\"1455\">\n<li data-start=\"1347\" data-end=\"1381\">\n<p data-start=\"1349\" data-end=\"1381\">If <code data-start=\"1352\" data-end=\"1367\">VC(A) &lt; VC(B)<\/code>, then <code data-start=\"1374\" data-end=\"1381\">A \u2192 B<\/code><\/p>\n<\/li>\n<li data-start=\"1384\" data-end=\"1455\">\n<p data-start=\"1386\" data-end=\"1455\">If <code data-start=\"1389\" data-end=\"1396\">VC(A)<\/code> and <code data-start=\"1401\" data-end=\"1408\">VC(B)<\/code> are incomparable, then they are <strong data-start=\"1441\" data-end=\"1455\">concurrent<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 data-start=\"1457\" data-end=\"1488\">\ud83c\udd9a Lamport vs Vector Clock:<\/h3>\n<div class=\"_tableContainer_16hzy_1\">\n<div class=\"_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"1489\" data-end=\"1998\">\n<thead data-start=\"1489\" data-end=\"1573\">\n<tr data-start=\"1489\" data-end=\"1573\">\n<th data-start=\"1489\" data-end=\"1511\" data-col-size=\"sm\">Feature<\/th>\n<th data-start=\"1511\" data-end=\"1540\" data-col-size=\"sm\">Lamport Clock<\/th>\n<th data-start=\"1540\" data-end=\"1573\" data-col-size=\"sm\">Vector Clock<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"1659\" data-end=\"1998\">\n<tr data-start=\"1659\" data-end=\"1743\">\n<td data-start=\"1659\" data-end=\"1681\" data-col-size=\"sm\">Timestamp Type<\/td>\n<td data-start=\"1681\" data-end=\"1710\" data-col-size=\"sm\">Scalar (Single Integer)<\/td>\n<td data-col-size=\"sm\" data-start=\"1710\" data-end=\"1743\">Vector (Array of Integers)<\/td>\n<\/tr>\n<tr data-start=\"1744\" data-end=\"1828\">\n<td data-start=\"1744\" data-end=\"1766\" data-col-size=\"sm\">Causality Detection<\/td>\n<td data-col-size=\"sm\" data-start=\"1766\" data-end=\"1795\">Partial (Yes)<\/td>\n<td data-col-size=\"sm\" data-start=\"1795\" data-end=\"1828\">Full<\/td>\n<\/tr>\n<tr data-start=\"1829\" data-end=\"1913\">\n<td data-start=\"1829\" data-end=\"1851\" data-col-size=\"sm\">Overhead<\/td>\n<td data-col-size=\"sm\" data-start=\"1851\" data-end=\"1880\">Low<\/td>\n<td data-col-size=\"sm\" data-start=\"1880\" data-end=\"1913\">Higher (due to vectors)<\/td>\n<\/tr>\n<tr data-start=\"1914\" data-end=\"1998\">\n<td data-start=\"1914\" data-end=\"1936\" data-col-size=\"sm\">Comparisons<\/td>\n<td data-col-size=\"sm\" data-start=\"1936\" data-end=\"1965\">Easy<\/td>\n<td data-col-size=\"sm\" data-start=\"1965\" data-end=\"1998\">Complex but accurate<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"sticky end-(--thread-content-margin) h-0 self-end select-none\">\n<div class=\"absolute end-0 flex items-end\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<hr data-start=\"2000\" data-end=\"2003\" \/>\n<h2 data-start=\"2005\" data-end=\"2021\">\ud83e\udde9 Use Cases:<\/h2>\n<ul data-start=\"2022\" data-end=\"2174\">\n<li data-start=\"2022\" data-end=\"2096\">\n<p data-start=\"2024\" data-end=\"2096\"><strong data-start=\"2024\" data-end=\"2035\">Lamport<\/strong>: When just order of events matters (e.g., mutual exclusion).<\/p>\n<\/li>\n<li data-start=\"2097\" data-end=\"2174\">\n<p data-start=\"2099\" data-end=\"2174\"><strong data-start=\"2099\" data-end=\"2109\">Vector<\/strong>: When causality is important (e.g., version control, snapshots).<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"2176\" data-end=\"2179\" \/>\n<p data-start=\"2181\" data-end=\"2308\" data-is-last-node=\"\" data-is-only-node=\"\">Let me know if you\u2019d like a <span class=\"decoration-token-text-secondary hover:text-token-text-secondary cursor-pointer underline decoration-dotted decoration-[12%] underline-offset-4 transition-colors duration-200 ease-in-out\">visual diagram<\/span>, <span class=\"decoration-token-text-secondary hover:text-token-text-secondary cursor-pointer underline decoration-dotted decoration-[12%] underline-offset-4 transition-colors duration-200 ease-in-out\">step-by-step example<\/span>, or <span class=\"decoration-token-text-secondary hover:text-token-text-secondary cursor-pointer underline decoration-dotted decoration-[12%] underline-offset-4 transition-colors duration-200 ease-in-out\">code implementation<\/span> of either clock system.<\/p>\n<h3 data-start=\"2181\" data-end=\"2308\"><a href=\"https:\/\/www2.cs.sfu.ca\/CourseCentral\/401\/qshi1\/slides\/week_9-1.pdf\" target=\"_blank\" rel=\"noopener\">Logical Clock: Lamport Clock and Vector Clock in Distributed System &#8211; Logical Time-Lamport&#8217;s and Vector Algorithm<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/ocw.mit.edu\/courses\/6-852j-distributed-algorithms-fall-2009\/b1eb7ebe942a5b8dc54d142cf78ac880_MIT6_852JF09_lec11.pdf\" target=\"_blank\" rel=\"noopener\">6.852J\/18.437J Distributed Algorithms: Time, clocks, and &#8230;<\/a><\/h3>\n<h3 class=\"LC20lb MBeuO DKV0Md\"><a href=\"https:\/\/cse.buffalo.edu\/~stevko\/courses\/cse486\/spring15\/lectures\/09-logical_time.pdf\" target=\"_blank\" rel=\"noopener\">CSE 486\/586 Distributed Systems Logical Time<\/a><\/h3>\n<h3><a href=\"https:\/\/www.jetir.org\/papers\/JETIR2105078.pdf\" target=\"_blank\" rel=\"noopener\">LOGICAL AND VECTOR CLOCKS USED IN &#8230;<\/a><\/h3>\n","protected":false},"excerpt":{"rendered":"<p>Logical Clock: Lamport Clock and Vector Clock in Distributed System &#8211; Logical Time-Lamport&#8217;s and Vector Algorithm. Lampor&#8217;t Clock and Vector Clock With Algorithm in Distributed System.<\/p>\n","protected":false},"author":64,"featured_media":2599,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[84],"tags":[1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599],"class_list":["post-2598","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-distributed-computing","tag-advantages-of-vector-clock-over-lamport-clock","tag-difference-between-logical-clock-and-vector-clock","tag-disadvantages-of-lamport-logical-clock","tag-global-clock-in-distributed-system","tag-lamport-clock-example","tag-lamport-clocks-and-vector-clocks","tag-lamport-logical-clock-in-distributed-system","tag-lamport-logical-clock-program-in-python","tag-lamport-logical-clock-video-lecture","tag-lamport-logical-clock-vs-vector-clock","tag-lamports-and-vector-algorithm-in-distributed-system","tag-logical-clock-in-distributed-system","tag-logical-time-in-distributed-system","tag-physical-clock-in-distributed-system"],"_links":{"self":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/2598","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/comments?post=2598"}],"version-history":[{"count":0,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/posts\/2598\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/media\/2599"}],"wp:attachment":[{"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/media?parent=2598"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/categories?post=2598"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.reilsolar.com\/pdf\/wp-json\/wp\/v2\/tags?post=2598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}