Javolution
Disruptor
| Javolution | Disruptor | |
|---|---|---|
| - | 36 | |
| - | 18,273 | |
| - | 0.0% | |
| - | 5.9 | |
| - | about 1 year ago | |
| Java | ||
| - | Apache License 2.0 |
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.
Javolution
We haven't tracked posts mentioning Javolution yet.
Tracking mentions began in Dec 2020.
Disruptor
-
Using LMAX Disruptor to build a high-performance in-memory event broker in Java.
As a Python developer, I'd typically reach for libraries like PyPubSub or Blinker for event handling, which work well for I/O-bound applications but struggle with CPU-intensive event processing due to the GIL for Python versions before 3.14. Go's channel-based concurrency model handles events elegantly with goroutines, and libraries like EventBus provide pub-sub patterns that feel natural in Go's ecosystem. However, neither ecosystem has a direct equivalent to Disruptor's mechanical sympathy approach. Python's interpreter overhead and Go's garbage collector (though better than Python's) both introduce latency that becomes visible at millions of events per second. If you're building a system where a few microseconds per event multiplied by millions of events actually matters (financial systems, real-time analytics, game servers), Java's mature JIT compilation, fine-tuned GC options, and libraries like Disruptor that exploit CPU cache behavior offer performance that's hard to match.
-
Clojure Async Flow Guide
I still use it. They finally fixed my biggest complaint about it a year ago, which is that you couldn't use vanilla Clojure lambdas for the Java functional interface, and so you'd have to reify that interface and it was bulky and ugly. Now it works fine so long as the interfaces actually have the @FunctionalInterface attribute.
Not every project uses @FunctionalInterface, but I've been trying to add it to places [1] [2] [3], and now I'm able to use Clojure in a lot more places.
[1] https://github.com/LMAX-Exchange/disruptor/pull/492
[2] https://github.com/apache/kafka/pull/19234
[3] https://github.com/apache/kafka/pull/19366
-
The LMAX Architecture (2011)
LMAX have an open source version of the disruptor in GitHub https://github.com/LMAX-Exchange/disruptor
-
Disruptor-rs: better latency and throughput than crossbeam
I played around with the original (Java) LMAX disruptor which was an interesting and different way to achieve latency/throughput. Here's some info on it[0] and a referenced Martin Fowler post[1].
[0] https://github.com/LMAX-Exchange/disruptor/wiki/Blogs-And-Ar...
[1] https://martinfowler.com/articles/lmax.html
- LMAX Disruptor – low latency inter-thread messaging for Java
-
Lightning Fast Multicast Ring Buffer
Nice. The per element atomic locks rather than per collection is a neat optimization I wouldn't have thought of! After a decade+ of LMax Disruptor being a well publicized multicast circular queue. https://lmax-exchange.github.io/disruptor/
-
Gnet is the fastest networking framework in Go
https://lmax-exchange.github.io/disruptor/#_what_is_the_disr.... Unfortunately IIUC writing this in Go still prevents the spin-locked acceptor thread from achieving the kind of performance you could get in a non-GC language, unless you chose to disable GC, so I'd guess Envoy is still faster.
https://gnet.host/docs/quickstart/ it's nice that you can use this simply though. Envoy is kind of tricky to setup with custom filters, so most of the time it's just a standalone binary.
[0] https://blog.envoyproxy.io/envoy-threading-model-a8d44b92231...
[1] https://lmax-exchange.github.io/disruptor/#_what_is_the_disr...
-
A lock-free ring-buffer with contiguous reservations (2019)
See also the Java LMAX Disruptor https://github.com/LMAX-Exchange/disruptor
I've built a similar lock-free ring buffer in C++11 https://github.com/posterior/loom/blob/master/doc/adapting.m...
-
JEP Draft: Deprecate Memory-Access Methods in Sun.misc.Unsafe for Removal
"Why we chose Java for our High-Frequency Trading application"
https://medium.com/@jadsarmo/why-we-chose-java-for-our-high-...
LMAX Disruptor customers
https://lmax-exchange.github.io/disruptor/
Among many other examples.
- LMAX Disruptor – High Performance Inter-Thread Messaging Library
What are some alternatives?
fastutil - fastutil extends the Java™ Collections Framework by providing type-specific maps, sets, lists and queues.
Agrona - High Performance data structures and utility methods for Java
Trove
JCTools
Primitive-Collections - A Primitive Collection library that reduces memory usage and improves performance and provides a lot of QoL
Eclipse Collections - Eclipse Collections is a collections framework for Java with optimized data structures and a rich, functional and fluent API.