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

crossmist

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

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异步

Download history 174/week @ 2024-04-26 179/week @ 2024-05-03 404/week @ 2024-05-10 106/week @ 2024-05-17 14/week @ 2024-05-24 53/week @ 2024-05-31 38/week @ 2024-06-07 14/week @ 2024-06-14 67/week @ 2024-06-21 171/week @ 2024-06-28 8/week @ 2024-07-05 4/week @ 2024-07-19 35/week @ 2024-07-26 11/week @ 2024-08-02 1/week @ 2024-08-09

每月 51 次下载

MIT 许可证

165KB
3K SLoC

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

几乎任意对象可以在进程之间和通道之间传递,包括文件句柄、套接字和其他通道。

依赖关系

~3–44MB
~704K SLoC