Rust:一个安全快速的多生产者多消费者 Channel 库
Flume 是一个非常快速的多生产者、多消费者 (MPMC) 通道库。它具有以下特点:
- 支持无边界、有边界和会合队列。
- 通常比
std::sync::mpsc
更快,有时甚至比crossbeam-channel
更快。 - 代码库中完全没有任何不安全的代码!
- 发送方和接收方都实现了
Send + Sync + Clone
。 - 可以无缝替换
std::sync::mpsc
。 - 支持 MPMC(多生产者多消费者)以及发送超时和截止日期等附加功能。
- 设计简洁,依赖关系少,代码库极小,编译速度快。
- 支持异步操作,可以与同步代码混合使用。
- 符合人体工学设计,拥有强大的选择式界面(Selector API)。
安装 Flume
要使用 Flume,可以运行 cargo add flume
,或者在 Cargo.toml
文件中添加以下依赖项:
flume = "x.y"
Flume 的可选功能
Flume 提供了一些可选功能,可以根据需要进行启用:
- spin: 使用自旋锁而非操作系统级同步原语来处理某些数据访问(对于特定工作负载,在某些平台上可能提高性能)。
- select: 添加对 Selector API 的支持,允许线程同时等待多个通道或操作。
- async: 添加对异步 API 的支持,包括与其他同步通道的兼容。
- eventual-fairness: 在 Selector 的实现中使用随机性,以避免某些事件对其他事件的偏置或饱和。
可以通过在 Cargo.toml
中更改依赖项来启用这些功能,例如:
flume = { version = "x.y", default-features = false, features = ["async", "select"] }
使用示例
下面是一个简单的 Flume 使用示例:
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);
}
更多信息
要了解更多内容,请访问 Flume 的 Github 页面。