flume

A safe and fast multi-producer, multi-consumer channel.

Latest version: 0.11.1 registry icon
Maintenance score
81
Safety score
100
Popularity score
61
Check your open source dependency risks. Get immediate insight about security, stability and licensing risks.
Security
  Vulnerabilities
Version Suggest Low Medium High Critical
0.11.1 0 0 0 0 0
0.11.0 0 0 0 0 0
0.10.14 0 0 0 0 0
0.10.13 0 0 0 0 0
0.10.12 0 0 0 0 0
0.10.11 0 0 0 0 0
0.10.10 0 0 0 0 0
0.10.9 0 0 0 0 0
0.10.8 0 0 0 0 0
0.10.7 0 0 0 0 0
0.10.6 0 0 0 0 0
0.10.5 0 0 0 0 0
0.10.4 0 0 0 0 0
0.10.3 0 0 0 0 0
0.10.2 0 0 0 0 0
0.10.1 0 0 0 0 0
0.10.0 0 0 0 0 0
0.9.2 0 0 0 0 0
0.9.1 0 0 0 0 0
0.9.0 0 0 0 0 0
0.8.4 0 0 0 0 0
0.8.3 0 0 0 0 0
0.8.1 0 0 0 0 0
0.8.0 0 0 0 0 0
0.7.2 0 0 0 0 0
0.7.1 0 0 0 0 0
0.7.0 0 0 0 0 0
0.6.2 0 0 0 0 0
0.6.1 0 0 0 0 0
0.6.0 0 0 0 0 0
0.5.1 0 0 0 0 0
0.5.0 0 0 0 0 0
0.4.0 0 0 0 0 0
0.3.2 0 0 0 0 0
0.3.1 0 0 0 0 0
0.3.0 0 0 0 0 0
0.2.0 0 0 0 0 0
0.1.0 0 0 0 0 0

Stability
Latest release:

0.11.1 - This version is safe to use because it has no known security vulnerabilities at this time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform

Licensing

Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.

Apache-2.0   -   Apache License 2.0

Not a wildcard

Not proprietary

OSI Compliant


MIT   -   MIT License

Not a wildcard

Not proprietary

OSI Compliant



Flume

A blazingly fast multi-producer, multi-consumer channel.

Cargo Documentation License actions-badge Casual Maintenance Intended

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);
}

Why Flume?

  • Featureful: Unbounded, bounded and rendezvous queues
  • Fast: Always faster than std::sync::mpsc and sometimes crossbeam-channel
  • Safe: No unsafe code anywhere in the codebase!
  • Flexible: Sender and Receiver both implement Send + Sync + Clone
  • Familiar: Drop-in replacement for std::sync::mpsc
  • Capable: Additional features like MPMC support and send timeouts/deadlines
  • Simple: Few dependencies, minimal codebase, fast to compile
  • Asynchronous: async support, including mix 'n match with sync code
  • Ergonomic: Powerful select-like interface

Usage

To use Flume, place the following line under the [dependencies] section in your Cargo.toml:

flume = "x.y"

Cargo Features

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 benchmarks (crossbeam benchmark suite)

Status

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).

License

Flume is licensed under either of: