1 个不稳定版本
0.1.0 | 2021年4月20日 |
---|
#449 in 操作系统
110KB
2K SLoC
sharify
使用共享内存回退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