Crates.io | flume |
lib.rs | flume |
version | 0.11.1 |
source | src |
created_at | 2019-07-31 00:18:26.586068 |
updated_at | 2024-10-19 13:54:21.390653 |
description | A blazingly fast multi-producer channel |
homepage | |
repository | https://github.com/zesterer/flume |
max_upload_size | |
id | 153104 |
size | 429,360 |
A blazingly fast multi-producer, multi-consumer channel.
use std::thread;
fn main() {
println!("Hello, world!");
let (tx, rx) = flume::unbounded();
thread::spawn(move || {
(0..10).for_each(|i| {
tx.send(i).unwrap();
})
});
let received: u32 = rx.iter().sum();
assert_eq!((0..10).sum::<u32>(), received);
}
std::sync::mpsc
and sometimes crossbeam-channel
unsafe
code anywhere in the codebase!Sender
and Receiver
both implement Send + Sync + Clone
std::sync::mpsc
async
support, including mix 'n match with sync codeselect
-like interfaceTo use Flume, place the following line under the [dependencies]
section in your Cargo.toml
:
flume = "x.y"
Flume comes with several optional features:
spin
: use spinlocks instead of OS-level synchronisation primitives internally for some kind of data access (may be more performant on a small number of platforms for specific workloads)
select
: Adds support for the Selector
API, allowing a thread to wait on several channels/operations at once
async
: Adds support for the async API, including on otherwise synchronous channels
eventual-fairness
: Use randomness in the implementation of Selector
to avoid biasing/saturating certain events over others
You can enable these features by changing the dependency in your Cargo.toml
like so:
flume = { version = "x.y", default-features = false, features = ["async", "select"] }
Although Flume has its own extensive benchmarks, don't take it from here that Flume is quick.
The following graph is from the crossbeam-channel
benchmark suite.
Tests were performed on an AMD Ryzen 7 3700x with 8/16 cores running Linux kernel 5.11.2 with the bfq scheduler.
Flume is in casual maintenance mode. This means that the crate will continue to receive critical security and bug fixes, but heavy feature development has stopped. If you're looking for a new feature, you're welcome to open a PR and I'll try to find the time to review it.
Flume has been great fun to work on, and I'm happy that it's being used successfully by so many people. I consider the crate to be largely feature-complete at this point (bar small details here and there).
Flume is licensed under either of:
Apache License 2.0, (http://www.apache.org/licenses/LICENSE-2.0)
MIT license (http://opensource.org/licenses/MIT)