8个版本 (2个稳定版)
1.0.2 | 2024年5月3日 |
---|---|
1.0.0 | 2024年5月1日 |
0.2.4 | 2024年1月25日 |
0.2.0 | 2023年12月19日 |
0.1.3 | 2023年7月29日 |
#5 in #同步
每月下载量 53
在crossmist中使用
23KB
471 行
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());
}
}
几乎任意对象可以在进程之间以及通道之间传递,包括文件句柄、套接字和其他通道。
依赖项
~2MB
~42K SLoC