#多进程 #通信 #无缝 #同步 #跨进程 #crossmist

crossmist-derive

高效且无缝的跨进程通信,支持同步和异步

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 #同步

Download history 274/week @ 2024-04-29 3/week @ 2024-05-06 70/week @ 2024-05-13 32/week @ 2024-05-20 10/week @ 2024-05-27 83/week @ 2024-06-03 24/week @ 2024-06-10 15/week @ 2024-06-17 20/week @ 2024-06-24 4/week @ 2024-07-01 27/week @ 2024-07-22 26/week @ 2024-07-29

每月下载量 53
crossmist中使用

MIT许可证

23KB
471

crossmist

License: MIT docs.rs crates.io

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