Releases: nicholassm/disruptor-rs
Releases · nicholassm/disruptor-rs
Release 3.3.0
Minor change with big impact:
- Consumers now publish the sequence number they are done reading at the end of a batch (instead of after each event processed).
- For batch publication, latency is reduced by 40% and throughput is increased by 60%.
- The reason is that the publisher and consumers communicate less through the
AtomicI64
.
Release 3.2.0
- New scheme for publishing available sequences to consumers in the Multi Producer case:
- The availability of a sequence number (slot in the
RingBuffer
) is now encoded using a single bit instead of anAtomicI32
. - The bit encodes whether the associated slot in the
RingBuffer
was published in an odd or even round (determined by the sequence numbers and how many rounds theRingBuffer
has taken given its size). - The scheme reduces memory by 32 times for the data structure for storing the availability (not counting the padding which was also removed but which is CPU-architecture specific).
- The performance is the same for single event publication but better for batch publication as
- each thread can exploit caching better due to the compressed data structure,
- there are fewer writes to atomics and thus
- the scheme reduces pressure on store buffers.
- The TLA+ model has been updated with this scheme and verified.
- The availability of a sequence number (slot in the
Release 3.1.0
- Fix typo in example in README related to
batch_publish
. - Make
builder
module public and add docs.
Release 3.0.1
- Fix typo in API in README.md.
Release 3.0.0
New major version due to changes in the public API:
- Fix spelling mistake in
pined_at_core
. Now justpin_at_core
. - For consistency and to avoid past tense,
thread_named
is now justthread_name
.
Release 2.2.0
- New feature: Batch publication. Dramatic performance increase compared to single event publication. See updated results in README.
- Use non-blocking
send
andrecv
methods in benchmarks with Crossbeam for better performance and better comparison.
Release 2.1.0
- Feature: Pass initial state that is neither
Send
norSync
to the processing thread if needed. E.g. the state used for processing events can now include e.g.Rc<RefCell<Data>>
for someData
.
Release 2.0.0
- Enforce that
Event
s on theRingBuffer
are bothSend
andSync
to prevent clients from getting Undefined Behaviour. - Internal improvements: Reduce the use of pointers and unsafe blocks.
Release 1.2.0
- Reduced measurement overhead in
spsc
benchmark. Benchmark results updated in README. - Added
mpsc
benchmark for the multi producer case. This is also a comparison benchmark withcrossbeam-channel
. - Added throughput benchmark by @Venkat2811.
- Added Github workflow: Tests are run with Miri.
Release 1.1.0
- Re-export
SingleConsumerBarrier
,MultiConsumerBarrier
,SingleProducer
andMultiProducer
to enable moving a producer to e.g. a function by being able to express the type of theProducer
.