Add a new concurrency primitive - MPSC (Multiple Producers Single Consumer) Batching Concurrent Queue. The main purpose of this queue is to optimize logging libraries.
The new queue should be faster (throughput-first, then latency) than Channel<T>, and BlockingCollection<T>.
- Java Disruptor, used in the log4j2
- dpdk ring with burst dequeues
- Infinite array? One fetch-and-add for most enqueues, segments could be recycled in the single consumer scenario.
- Linked list queue (non batching).
- ConcurrentBoundedQueue. A simple implementation that must be compared to a complex one (to argue that a complex implementation is needed at all)
- HellBrick.AsyncCollections - implementation for comparison, and becnhmarks
- DataflowChannel - unordered, for comparison
Add a new concurrency primitive - MPSC (Multiple Producers Single Consumer) Batching Concurrent Queue. The main purpose of this queue is to optimize logging libraries.
The new queue should be faster (throughput-first, then latency) than
Channel<T>, andBlockingCollection<T>.