lockfree
spsc_queue
lockfree | spsc_queue | |
---|---|---|
11 | 2 | |
704 | 35 | |
- | - | |
7.9 | 10.0 | |
about 1 month ago | over 4 years ago | |
C++ | C++ | |
MIT License | BSD 2-clause "Simplified" License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
lockfree
- A lock-free ring-buffer with contiguous reservations (2019)
-
Atomics and Concurrency
If you're interested about lock-free data structures, I wrote [lockfree](https://github.com/DNedic/lockfree) a collection of lock-free data structures meant to be readable and both hosted system and embedded friendly.
-
Optimizing a Ring Buffer for Throughput
If you want more than a spsc queue, I've written `lockfree`, a collection of SPSC and MPMC data structures along the same principles the author here used:https://github.com/DNedic/lockfree.
The library is written in standard C++11 (but additional API's for higher C++ versions have been added), uses no dynamic allocation and is configurable so it is both big metal and deeply embedded friendly.
-
A collection of lock-free data structures written in standard C++11
- A lot of code won't work for types with no default constructors, but that is at least compile error
- Using memcpy[0] for arbitrary types is just wrong, see [1]
[0] https://github.com/DNedic/lockfree/blob/main/lockfree/inc/bi...
[1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p11...
-
Lock-free data structures
My friend wrote a few lock-free data structures and he is now looking for some feedback. Here is the link: https://github.com/DNedic/lockfree
- A collection of lock-free data structures written in standard c++11
- A collection of embedded friendly lock-free data structures written in standard C++11
spsc_queue
-
Low latency queues in Rust ecosystem
I've been researching how low latency I can get with Rust and if there's anything already built. If I limit the question only to SPSC queues, it looks like crossbeam-channel is the most performant one and needs around 20ns per item. In comparison to e.g. https://github.com/Deaod/spsc_queue with almost 1ns/item (the linked queue is not implemented in Rust and only used as an example of what's physically possible). I don't see why we couldn't have something like that in the Rust ecosystem and am wondering if there are any other places to look for perf structures like that, other than Github or crates.io (or they live under a different tag). Also if I would go for a c++ queue, can somebody share the perf impact of calling it from Rust? Haven't done that yet.
-
A collection of lock-free data structures written in standard C++11
Should be benchmarked against ->
https://github.com/Deaod/spsc_queue
If proven faster OK.. If not.. Well.. back to the drawing board.
What are some alternatives?
rc_event_queue - VecDeque-like fast, unbounded, mpmc/spmc concurent FIFO message queue. Lockless reads, write-lock writes.
tlaplus - TLC is a model checker for specifications written in TLA+. The TLA+Toolbox is an IDE for TLA+.
glibc - GNU Libc
distortos - object-oriented C++ RTOS for microcontrollers
micro-gl - Headers Only C++11 CPU Vector Graphics. no std-lib, no FPU and no GPU required !
Ring-Buffer - A simple ring buffer (circular buffer) designed for embedded systems.
multiversion-concurrency-control - Implementation of multiversion concurrency control, Raft, Left Right concurrency Hashmaps and a multi consumer multi producer Ringbuffer, concurrent and parallel load-balanced loops, parallel actors implementation in Main.java, Actor2.java and a parallel interpreter
set-ethernet-max-ring-buffer - Set max TX/RX ring buffer for ethernet device
jemalloc
bounded-spsc-queue - A Bounded SPSC queue for Rust
rust-playground - The Rust Playground