#共享内存 #进程 #发送 #回退 #已回退 #类型 #便宜地

sharify

使用共享内存回退类型,并在进程间以低廉的成本发送它们

1 个不稳定版本

0.1.0 2021年4月20日

#449 in 操作系统

MIT 许可证

110KB
2K SLoC

sharify

Documentation Crates.io

使用共享内存回退Rust类型,并在进程间以低廉的成本发送它们。

例如

use sharify::SharedMut;
use std::{iter, sync::mpsc::channel, thread};

// Create a slice backed by shared memory.
let mut shared_slice: SharedMut<[u64]> = SharedMut::new(&(0, 1_000_000))?;

// Write some data to it.
for (src, dst) in
    iter::successors(Some(0), |&p| Some(p + 1))
    .zip(shared_slice.as_view_mut().iter_mut())
{
    *dst = src;
}

// The shared slice can be sent between processes cheaply without copying the data. What is shown here for threads works equally well for processes, e.g. using the ipc_channel crate.
let (tx, rx) = channel::<SharedMut<[u64]>>();
let handle = thread::spawn(move || {
    let shared_slice = rx.recv().unwrap();
    // Get a view into the shared memory
    let view: &[u64] = shared_slice.as_view();
    assert_eq!(view.len(), 1_000_000);
    assert!(iter::successors(Some(0), |&p| Some(p + 1))
        .zip(view.iter())
        .all(|(a, &b)| a == b));
});
tx.send(shared_slice)?;
handle.join().unwrap();

有关如何为您的类型执行此操作的详细信息,请参阅文档。由于使用了const generics,需要至少Rust 1.51.0

依赖项

~2.5–3.5MB
~76K SLoC