Hi everyone!
I've recently released a new version of Loole, a Rust channel crate that supports multiple producers and multiple consumers, with both synchronous and asynchronous send/receive operations.
The main focus of this release and the recent development work has been correctness, API compatibility, and performance.
What's improved?
-
Correctness and testing: I've fixed several bugs and added more tests, especially around edge cases. Loole now passes the Flume tests covering the APIs that it implements.
-
Flume API compatibility: I've added more APIs to make Loole more compatible with Flume, making it easier to work with if you're already familiar with Flume's API.
-
Performance: I've continued optimizing the channel implementation and its send/receive paths. I've also expanded the benchmarking setup so the performance of different channel configurations can be evaluated and compared.
What is Loole?
Loole is a safe sync/async MPMC channel crate with:
-
Bounded, unbounded, and rendezvous channels.
-
Blocking and asynchronous send/receive operations.
-
No
unsafecode (#![forbid(unsafe_code)]). -
A familiar API, with compatibility with Flume as one of its goals.
Links
-
Repository: GitHub - mahdi-shojaee/loole: A safe sync/async multi-producer, multi-consumer channel · GitHub
-
Documentation: loole - Rust
-
Benchmarks: Throughput results · Latency results
I'd appreciate feedback from people who work with channels and concurrent Rust code. In particular, I'd be interested in hearing about edge cases I may have missed, and benchmark scenarios that better reflect real-world workloads.
Thanks for taking a look!