multiversion-concurrency-contro VS Disruptor

Compare multiversion-concurrency-contro vs Disruptor and see what are their differences.

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
multiversion-concurrency-contro Disruptor
16 30
- 17,020
- 0.9%
- 5.4
- 4 months ago
Java
- Apache License 2.0
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
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.

multiversion-concurrency-contro

Posts with mentions or reviews of multiversion-concurrency-contro. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-05-18.
  • CRDT-richtext: Rust implementation of Peritext and Fugue
    17 projects | news.ycombinator.com | 18 May 2023
    https://github.com/samsquire/multiversion-concurrency-contro...

    And I implemented a 3 way text diff with myers algorithm based on https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm...

    https://github.com/samsquire/text-diff

    I implemented an eventually consistent mesh protocol that uses timestamps to provide last write wins

  • A collection of lock-free data structures written in standard C++11
    7 projects | news.ycombinator.com | 10 May 2023
    I think I lean towards per-thread sharding instead of mutex based or lock free data structures except for lockfree ringbuffers.

    You can get embarassingly parallel performance if you split your data by thread and aggregate periodically.

    If you need a consistent view of your entire set of data, that is slow path with sharding.

    In my experiments with multithreaded software I simulate a bank where many bankaccounts are randomly withdrawn from and deposited to. https://github.com/samsquire/multiversion-concurrency-contro...

    I get 700 million requests per second due to the sharding of money over accounts.

  • The “Build Your Own Database” book is finished
    5 projects | news.ycombinator.com | 22 Apr 2023
    If you want some sample code to implement MVCC, I implemented MVCC in multithreaded Java as a toy example

    https://github.com/samsquire/multiversion-concurrency-contro...

    First read TransactionC.java then read MVCC.java

  • Let's write a setjmp
    4 projects | news.ycombinator.com | 12 Feb 2023
    I wrote an unrolled switch statement in Java to simulate eager async/await across treads.

    https://github.com/samsquire/multiversion-concurrency-contro...

    The goal is that a compiler should generate this for you. This code is equivalent to the following:

       task1:
  • Structured Concurrency Definition
    2 projects | news.ycombinator.com | 6 Feb 2023
    https://doc.rust-lang.org/book/ch16-00-concurrency.html

    I've been working on implementing Java async/await state machine with switch statements and a scheduling loop. If the user doesn't await the async task handle, then the task's returnvalue is never handled. This is similar to the Go problem with the go statement.

    https://github.com/samsquire/multiversion-concurrency-contro...

    If your async call returns a handle and

  • Small VMs and Coroutines
    3 projects | news.ycombinator.com | 19 Jan 2023
    yield value2++

    https://github.com/samsquire/multiversion-concurrency-contro...

    I am still working on allowing multiple coroutines to be in flight in parallel at the same time. At the moment the tasks share the same background thread.

    I asked this stackoverflow question regarding C++ coroutines, as I wanted to use coroutines with a thread pool.

    https://stackoverflow.com/questions/74520133/how-can-i-pass-...

  • Hctree is an experimental high-concurrency database back end for SQLite
    5 projects | news.ycombinator.com | 18 Jan 2023
    This is very interesting. Thank you for submitting this and thank you for working on this.

    I am highly interested in parallelism and high concurrency. I implemented multiversion concurrency control in Java.

    https://github.com/samsquire/multiversion-concurrency-contro...

    I am curious how to handle replication with high concurrency. I'm not sure how you detect dangerous reads+writes to the same key (tuples/fields) across different replica machines. In other words, multiple master.

    I am aware Google uses truetime and some form of timestamp ordering and detection of interfering timestamps. But I'm not sure how to replicate that.

    I began working on an algorithm to synchronize database records, do a sort, then a hash for each row where hash(row) = hash(previous_row.hash + row.data)

    Then do a binary search on hashes matching/not matching. This is a synchronization algorithm I'm designing that requires minimal data transfer but multiple round trips.

    The binary search would check the end of the data set for hash(replica_a.row[last]) == hash(replica_b.row[last]) then split the hash list in half and check the middle item, this shall tell you which row and which columns are different.

  • Tail Call Optimization: The Musical
    2 projects | news.ycombinator.com | 8 Jan 2023
    https://github.com/samsquire/multiversion-concurrency-contro...

    I want to redesign the architecture of the async/await to be easier to understand. I want to use a state machine somehow.

  • Rust Atomics and Locks: Low-Level Concurrency in Practice
    3 projects | news.ycombinator.com | 6 Jan 2023
    I wrote an unrolled state machine for my async/await in Java. This models a simple async/await program and runs tasks on other threads - without locks. I use a design I call token ring parallelism, where threads take turns and are linked together in a ring structure.

    https://github.com/samsquire/multiversion-concurrency-contro...

    I wrote a own lock free algorithm here that I use to do message passing between actor threads. My goal is high throughput performance and low latency.

    https://github.com/samsquire/multiversion-concurrency-contro...

    With 11 threads (on a 12 core processor, deliberately left one core for Windows)

  • A Compiler Writing Playground
    3 projects | news.ycombinator.com | 26 Nov 2022
    I then started writing a parser for a high level language and then code generation from the AST to the imaginary assembly. My interpreter is multithreaded and can send integers between interpreters. It is very early and doesn't do much.

    Code is at https://github.com/samsquire/multiversion-concurrency-contro...

    The high level language looks similar to Javascript except I tried to parse everything as an expression. I need to parse functions as expressions.

    I was experimenting with Protothreads in C recently to try understand how it worked and I wrote a giant switch statement and a while loop in Java to simulate async/await. It would be interesting to do codegen for coroutines.

    here's that giant switch statement and scheduler https://github.com/samsquire/multiversion-concurrency-contro...

    One idea for a stackless design I had was to preallocate memory for each method call for a call to that function and avoid a stack altogether. This would allow coroutines between methods and avoid the function colour problem because everything is a coroutine.

    Is there any communities for programming language developers? Where do all the language developers meet up and talk theory and implementation? I am on eatonphil's discord and we talk there.

    One problem I am trying to understand how to solve is how you would write a multithreaded interpreter and language that allowed parallel interpretation similar to C# and Java. If the allocator is thread safe and you share an object pool between interpreters and you hash object equality by sourcecode, then you could send objects between threads with only a synchronization cost.

    I believe Python has the problem that object identity is different in each subinterpreter so you need to marshall the data.

Disruptor

Posts with mentions or reviews of Disruptor. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-03-14.
  • Gnet is the fastest networking framework in Go
    2 projects | news.ycombinator.com | 14 Mar 2024
    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)
    9 projects | news.ycombinator.com | 29 Feb 2024
    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
    3 projects | news.ycombinator.com | 16 Jan 2024
    "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
    1 project | /r/hackernews | 20 Nov 2023
    4 projects | news.ycombinator.com | 17 Nov 2023
    Current documentation

    https://lmax-exchange.github.io/disruptor/

  • Progress on No-GIL CPython
    5 projects | news.ycombinator.com | 20 Oct 2023
    LMAX Disruptor has on their wiki that average latency to send a message from one thread to another at 53 nanoseconds. For comparison a mutex is like 25 nanoseconds and more if Contended but a mutex is point to point synchronization.

    The great thing about it is that multiple threads can receive the same message without much more effort.

    https://github.com/LMAX-Exchange/disruptor/wiki/Performance-...

    https://gist.github.com/rmacy/2879257

    I am dreaming of language that is similar to Smalltalk that stays single threaded until it makes sense to parallise.

    I am looking for problems to parallelism that are not big data. Parallelism is like adding more cars to the road rather than increasing the speed of the car. But what does a desktop or mobile user need to do locally that could take advantage of the mathematical power of a computer? I'm still searching.

  • Disruptor 4.0.0 Released
    1 project | news.ycombinator.com | 29 Sep 2023
  • Anything can be a message queue if you use it wrongly enough
    6 projects | news.ycombinator.com | 4 Jun 2023
    Database config should be two connection strings, 1 for the admin user that creates the tables and anther for the queue user. Everything else should be stored in the database itself. Each queue should be in its own set of tables. Large blobs may or may not be referenced to an external file.

    Shouldn't a message send be worst case a CAS. It really seems like all the work around garbage collection would have some use for in-memory high speed queues.

    Are you familiar with the LMAX Disruptor? Is is a Java based cross thread messaging library used for day trading applications.

    https://lmax-exchange.github.io/disruptor/

  • Any library you would like to recommend to others as it helps you a lot? For me, mapstruct is one of them. Hopefully I would hear some other nice libraries I never try.
    21 projects | /r/java | 27 May 2023
    Disruptor for inter-thread messaging
  • Measuring how much Rust's bounds checking actually costs
    3 projects | /r/rust | 30 Nov 2022
    I have never worked in any industries where a perf margin was that small. It is funny, in HFT there are folks using Lmax (Java) and then you have folks writing their own TCP/IP stacks on FPGAs to do trading.

What are some alternatives?

When comparing multiversion-concurrency-contro and Disruptor you can also consider the following projects:

electric - Local-first sync layer for web and mobile apps. Build reactive, realtime, local-first apps directly on Postgres.

JCTools

swift - the multiparty transport protocol (aka "TCP with swarming" or "BitTorrent at the transport layer")

Agrona - High Performance data structures and utility methods for Java

supercollider - An audio server, programming language, and IDE for sound synthesis and algorithmic composition.

fastutil - fastutil extends the Java™ Collections Framework by providing type-specific maps, sets, lists and queues.

dictomaton - Finite state dictionaries in Java

MPMCQueue.h - A bounded multi-producer multi-consumer concurrent queue written in C++11

hamt - A hash array-mapped trie implementation in C

Eclipse Collections - Eclipse Collections is a collections framework for Java with optimized data structures and a rich, functional and fluent API.

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

Javolution