19 个版本 (6 个稳定版)
1.1.0 | 2024 年 6 月 27 日 |
---|---|
1.0.5 | 2024 年 5 月 15 日 |
0.2.4 | 2024 年 1 月 25 日 |
0.2.1 | 2023 年 12 月 19 日 |
0.1.4 | 2023 年 7 月 29 日 |
#364 在 异步
每月 51 次下载
165KB
3K SLoC
crossmist
crossmist 为 Rust 提供高效且无缝的跨进程通信。它提供了与 std::thread::spawn
和单生产者单消费者通道相似的语义,包括同步和异步。
安装
$ cargo add crossmist
或者将以下内容添加到您的 Cargo.toml
crossmist = "1.1"
文档
查看 docs.rs.
动机示例
此crate允许您轻松在另一个进程中执行计算,而无需创建单独的可执行文件或手动解析命令行参数。例如,最简单的示例,在一个一次性子进程中计算几个数字的总和,看起来像这样
#[crossmist::main]
fn main() {
println!("5 + 7 = {}", add.run(vec![5, 7]).unwrap());
}
#[crossmist::func]
fn add(nums: Vec<i32>) -> i32 {
nums.into_iter().sum()
}
此crate还支持具有恒定跨进程通信的长期任务
#[crossmist::main]
fn main() {
let (mut ours, theirs) = crossmist::duplex().unwrap();
add.spawn(theirs).expect("Failed to spawn child");
for i in 1..=5 {
for j in 1..=5 {
println!("{i} + {j} = {}", ours.request(&vec![i, j]).unwrap());
}
}
}
#[crossmist::func]
fn add(mut chan: crossmist::Duplex<i32, Vec<i32>>) {
while let Some(nums) = chan.recv().unwrap() {
chan.send(&nums.into_iter().sum());
}
}
几乎任意对象可以在进程之间和通道之间传递,包括文件句柄、套接字和其他通道。
依赖关系
~3–44MB
~704K SLoC