Skip to content

Releases: nicholassm/disruptor-rs

Release 3.3.0

27 Jan 19:47
Compare
Choose a tag to compare

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

10 Aug 20:18
Compare
Choose a tag to compare
  • 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 an AtomicI32.
    • 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 the RingBuffer 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
      1. each thread can exploit caching better due to the compressed data structure,
      2. there are fewer writes to atomics and thus
      3. the scheme reduces pressure on store buffers.
    • The TLA+ model has been updated with this scheme and verified.

Release 3.1.0

21 Jul 05:26
Compare
Choose a tag to compare
  • Fix typo in example in README related to batch_publish.
  • Make builder module public and add docs.

Release 3.0.1

14 Jul 07:27
Compare
Choose a tag to compare
  • Fix typo in API in README.md.

Release 3.0.0

14 Jul 07:18
Compare
Choose a tag to compare

New major version due to changes in the public API:

  • Fix spelling mistake in pined_at_core. Now just pin_at_core.
  • For consistency and to avoid past tense, thread_named is now just thread_name.

Release 2.2.0

19 Jun 20:03
Compare
Choose a tag to compare
  • New feature: Batch publication. Dramatic performance increase compared to single event publication. See updated results in README.
  • Use non-blocking send and recv methods in benchmarks with Crossbeam for better performance and better comparison.

Release 2.1.0

01 Jun 05:56
Compare
Choose a tag to compare
  • Feature: Pass initial state that is neither Send nor Sync to the processing thread if needed. E.g. the state used for processing events can now include e.g. Rc<RefCell<Data>> for some Data.

Release 2.0.0

29 May 18:32
Compare
Choose a tag to compare
  • Enforce that Events on the RingBuffer are both Send and Sync to prevent clients from getting Undefined Behaviour.
  • Internal improvements: Reduce the use of pointers and unsafe blocks.

Release 1.2.0

22 May 19:05
Compare
Choose a tag to compare
  • 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 with crossbeam-channel.
  • Added throughput benchmark by @Venkat2811.
  • Added Github workflow: Tests are run with Miri.

Release 1.1.0

29 Apr 19:27
Compare
Choose a tag to compare
  • Re-export SingleConsumerBarrier, MultiConsumerBarrier, SingleProducer and MultiProducer to enable moving a producer to e.g. a function by being able to express the type of the Producer.