@thi.ng/vclock
v0.3.127
Published
Vector clock functions for synchronizing distributed states & processes
Maintainers
Readme
[!NOTE]
This is one of 216 standalone projects. LLM-free, human-made and cared for software, maintained as part of the @thi.ng/umbrella ecosystem and anti-framework.
🚀 Please help me to work full-time on these projects by sponsoring me. Thank you! ❤️
About
Vector clock functions for synchronizing distributed states & processes.
- Initially all clocks are zero.
- Each time a process experiences an internal event, it increments its own
logical clock in the vector by one (
inc()). - Each time a process sends a message, it increments its own logical clock in the vector by one and then sends a copy of its own vector.
- Each time a process receives a message, it increments its own logical clock in
the vector by one and updates each element in its vector by taking the maximum
of the value in its own vector clock and the value in the vector in the
received message (
merge()).
The package provides the following immutable vector clock operations, where vector clocks are plain JS objects:
inc(clock, id)- increment (or create) clock componentremove(clock, id)- remove clock componentmerge(a, b)- merge two vector clockssignedSkew(a, b)- max signed difference between vector clocksabsSkew(a, b)- max unsigned difference between vector clockscompare(a, b)- comparator for logically ordering vector clocksisBefore(a, b)- true if a < bisAfter(a, b)- true if a > bisConcurrent(a, b)- if both clocks represent concurrent updatesequiv(a, b)- equality predicateorderAsc(a, b)- alias forcompare()orderDesc(a, b)- reverse order toorderAsc()
References:
- Wikipedia
- Princeton COS 418: Distributed Systems
- F. Mattern: Virtual Time and Global States of Distributed Systems
- P. Krzyzanowski: Clock synchronization
- L. Lamport
- Akka docs
Status
BETA - possibly breaking changes forthcoming
Search or submit any issues for this package
Installation
yarn add @thi.ng/vclockESM import:
import * as vc from "@thi.ng/vclock";Browser ESM import:
<script type="module" src="https://esm.run/@thi.ng/vclock"></script>For Node.js REPL:
const vc = await import("@thi.ng/vclock");Package sizes (brotli'd, pre-treeshake): ESM: 431 bytes
Dependencies
Note: @thi.ng/api is in most cases a type-only import (not used at runtime)
API
TODO
Authors
If this project contributes to an academic publication, please cite it as:
@misc{thing-vclock,
title = "@thi.ng/vclock",
author = "Karsten Schmidt",
note = "https://thi.ng/vclock",
year = 2018
}License
© 2018 - 2026 Karsten Schmidt // Apache License 2.0
