“凭什么说你比我先?”——没有上帝时钟,如何判断“谁先谁后”?

thbcm阅读(18)

兰伯特逻辑时钟

兰伯特逻辑时钟(Lamport Logical Clock)为系统中的每个事件分配一个单调递增的数字(时间戳),用于捕捉事件间的偏序关系(Happened-Before Relationship)。

假设每个进程 Pi 维护一个本地计数器Ci 。

1)进程内事件发生:Pi 在执行一个内部事件或发送消息前,Ci = Ci +1。

2)消息发送:Pi 发送消息m时,附带当前Ci 值作为消息时间戳 ts(m)。

3)消息接收:Pj 接收到消息m后,更新其本地计数器 Cj = max(Cj, ts(m) )+ 1。

如果事件A发生在事件B之前(A -> B),则 C(A) < C(B)。但反之不成立,即 C(A) < C(B)并不一定意味着 A -> B,A和B可能是并发的。

兰伯特时钟虽然解决了存在依赖关系的事件时序,但无法区分两个具有相同逻辑时间戳的事件的真实顺序,也无法判断两个时间戳不同但无因果关系的事件是否为并发。

WeakMap 应用场景与示例

thbcm阅读(14)

下面是一个对比 WeakMap 和 Map 主要特性的表格,帮助你快速了解它们的区别:

为什么要用async、await ?

thbcm阅读(14)

异步编程可以提高系统的吞吐量,async/await语法简化了异步编程的实现,降低使用门槛。

API 响应体加密场景下的调试实践:Postman 的局限与 Apipost 的优化

thbcm阅读(12)

后端服务出于安全性或协议规范的考虑,对 API 的响应体进行了加密或编码处理,例如 Base64 编码AES/RSA 加密等。这样做在生产环境中是合理且必要的,能够避免敏感数据被明文传输。但与此同时,也为开发和测试阶段的调试带来了不小的麻烦。

联系我们