Suppose we have many writers and one reader. Does a mpsc channel tend to produce better performance than an Arc<Mutex<VecDeque<_>>>
?
If so, what data structure is mpsc using behind the scenes ?
Suppose we have many writers and one reader. Does a mpsc channel tend to produce better performance than an Arc<Mutex<VecDeque<_>>>
?
If so, what data structure is mpsc using behind the scenes ?
Since 1.67.0, the standard library's mpsc
has been re-implemented with code from crossbeam-channel
: Announcing Rust 1.67.0 | Rust Blog. The PR that did this merge is Merge crossbeam-channel into `std::sync::mpsc` by ibraheemdev · Pull Request #93563 · rust-lang/rust · GitHub and it has some context on why they did it.
I haven't personally benchmarked mpsc
against Arc<Mutex<VecDeque<T>>>
, and I don't think anyone else has, either. If you are actually interested in the difference, you will have to do your own benchmarking.
As for the implementation, it's all available here: rust/library/std/src/sync/mpmc at master · rust-lang/rust · GitHub
There is a lot to go through in there, but the high-level points of interest are:
The docs for the array-backed implementation links to these articles about lock-free channel design:
And the crossbeam-channel
benchmark results can give you a better idea of what you're getting into.
This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.