Channels are concurrent FIFO queues used for passing messages between threads.
Crossbeam's channels are an alternative to the [std::sync::mpsc
] channels
provided by the standard library. They are an improvement in pretty much all
aspects: ergonomics, flexibility, features, performance.
Read the original RFC that introduced these channels for more information on their design and implementation.
Add this to your Cargo.toml
:
toml
[dependencies]
crossbeam-channel = "0.1"
Next, add this to your crate:
rust
extern crate crossbeam_channel;
std::sync::mpsc
| | std::sync::mpsc
| crossbeam-channel
|
|----------------------------------|------------------------------------|---------------------------------------------------|
| Unbounded channel constructor | channel()
| unbounded()
|
| Bounded channel constructor | sync_channel(cap)
| bounded(cap)
|
| Sender types | Sender
and SyncSender
| Sender
|
| Receiver types | Receiver
| Receiver
|
| Sender implements Sync
? | No | Yes |
| Receiver implements Sync
? | No | Yes |
| Sender implements Clone
? | Yes | Yes |
| Receiver implements Clone
? | No | Yes |
| Sender operations | try_send
, send
| try_send
, send
, send_timeout
|
| Receiver operations | try_recv
, recv
, recv_timeout
| try_recv
, recv
, recv_timeout
|
| Additional sender methods | | is_empty
, len
, capacity
|
| Additional receiver methods | iter
, try_iter
| iter
, try_iter
, is_empty
, len
, capacity
|
| Selection macro | select!
| select_loop!
|
| Select interface | std::sync::mpsc::Select
| crossbeam_channel::Select
|
| Select has a safe interface? | No | Yes |
| Select supports send operations? | No | Yes |
| Select can have a timeout? | No | Yes |
| Select can be non-blocking? | No | Yes |
Licensed under the terms of MIT license and the Apache License (Version 2.0).
See LICENSE-MIT and LICENSE-APACHE for details.