[−][src]Crate lunatic
This library contains higher level wrappers for low level Lunatic syscalls.
Example
Create 1_000 child processes and calculate the sum of numbers from 0 to i in each child process, then send the result back to the parent process and print it.
use lunatic::{Channel, Process}; fn main() { let channel = Channel::new(0); let vec: Vec<i32> = (0..1_000).collect(); for i in vec.iter() { Process::spawn((*i, vec.clone(), channel.clone()), child).unwrap(); } for _ in vec.iter() { let (i, sum) = channel.receive(); println!("Sum until {}: {}", i, sum); } } //! Child process calculates the sum of numbers of context.1 until context.0 index. fn child(context: (i32, Vec<i32>, Channel<(i32, i32)>)) { let i = context.0; let vec = context.1; let channel = context.2; let sum_until_i: i32 = vec[..=i as usize].iter().sum(); channel.send((i, sum_until_i)); }
Compile your app to a WebAssembly target:
cargo build --release --target=wasm32-wasi
and run it with
lunatic target/wasm32-wasi/release/<name>.wasm
Re-exports
pub use channel::Channel; |
pub use process::Process; |
Modules
channel | |
net | |
process | |
stdlib |
Functions
yield_ |
Type Definitions
Externref | Rust doesn't have a native representation for Externrefs. Lunatic will do the transfomration to i32s during normalisation. |