channel/
channel.rs

1extern crate poolite;
2use poolite::Pool;
3
4use std::sync::mpsc::{channel, Sender};
5
6/// `cargo run --example channel`
7fn main() {
8    let pool = Pool::new().unwrap();
9    let (mp, sc) = channel();
10    for i in 0..38 {
11        let mp = mp.clone();
12        pool.push(move || test(i, mp));
13    }
14
15    pool.join(); // wait for the pool
16    println!("{:?}", pool);
17
18    while let Ok((k, v)) = sc.try_recv() {
19        println!("key: {}\tvalue: {}", k, v);
20    }
21}
22
23fn test(msg: i32, mp: Sender<(i32, i32)>) {
24    let res = fib(msg);
25    mp.send((msg, res)).unwrap();
26}
27
28fn fib(msg: i32) -> i32 {
29    match msg {
30        0...2 => 1,
31        x => fib(x - 1) + fib(x - 2),
32    }
33}