Evolutionary history of the RabbitMQ .NET Client towards concurrency
summary
The RabbitMQ .NET client evolves from sync to a parallel async path by adding a redundant async worker and a dispatchConsumersAsync flag plus a consumer dispatch concurrency setting; removing lock contention yields up to 6.66× throughput on receives; benchmarks compare TaskCompletionSource (faster enqueue) versus SemaphoreSlim and System.Threading.Channels (less GC, better end-to-end); buffering must be copied unless consumer hands off bytes; current release 6.2 works and future 7/8 target full async model methods.
AI-written summary · about
chapters (32)
- 0:00Introduction
- 1:34Agenda
- 3:38What is the client
- 4:27What is the broker
- 5:59Connection objects
- 7:14Model
- 10:48Confirms Aware
- 11:52Demo
- 12:35Why concurrency
- 13:33Multiple models
- 13:59How to achieve concurrency
- 16:03Async void
- 16:53Copy the buffer
- 17:41concurrency
- 17:56semaphore
- 18:46advanced trickery
- 19:43interleaving calls
- 20:18sequential execution
- 21:36concurrent exclusive scheduler
- 22:51concurrency demo
- 23:37buffer copy
- 24:29recap
- 27:35Consumer Work Service
- 28:29CPU Performance
- 30:25Batching Work Pool
- 32:59Prefetch Count
- 36:06Benchmark Results
- 38:30Async Connection Factory
- 39:43Task Completion Source
- 49:10Threading Channel
- 53:50concurrency loop
- 56:40summary
related talks
43mLet's Go asynchronous
57mPushing C# to the limit
57mAsync programming in .NET: Best practices
20mIt's Critical: Concurrent programming as a sane programming model
38mModeling concurrency in Ruby and beyond
54mComplex Concurrency Patterns with Go
01h 08mBetter Code: Concurrency
03h 29mConcurrency with Clojure
