diff options
Diffstat (limited to 'vendor/flume/examples')
-rw-r--r-- | vendor/flume/examples/async.rs | 21 | ||||
-rw-r--r-- | vendor/flume/examples/perf.rs | 30 | ||||
-rw-r--r-- | vendor/flume/examples/select.rs | 25 | ||||
-rw-r--r-- | vendor/flume/examples/simple.rs | 18 |
4 files changed, 94 insertions, 0 deletions
diff --git a/vendor/flume/examples/async.rs b/vendor/flume/examples/async.rs new file mode 100644 index 0000000..a562700 --- /dev/null +++ b/vendor/flume/examples/async.rs @@ -0,0 +1,21 @@ +#[cfg(feature = "async")] +#[async_std::main] +async fn main() { + let (tx, rx) = flume::bounded(1); + + let t = async_std::task::spawn(async move { + while let Ok(msg) = rx.recv_async().await { + println!("Received: {}", msg); + } + }); + + tx.send_async("Hello, world!").await.unwrap(); + tx.send_async("How are you today?").await.unwrap(); + + drop(tx); + + t.await; +} + +#[cfg(not(feature = "async"))] +fn main() {} diff --git a/vendor/flume/examples/perf.rs b/vendor/flume/examples/perf.rs new file mode 100644 index 0000000..054dcbd --- /dev/null +++ b/vendor/flume/examples/perf.rs @@ -0,0 +1,30 @@ +fn main() { + let thread_num = 32; + let msg_num = 16; + + let (mut main_tx, main_rx) = flume::bounded::<()>(1); + + for _ in 0..thread_num { + let (mut tx, rx) = flume::bounded(1); + std::mem::swap(&mut tx, &mut main_tx); + + std::thread::spawn(move || { + for msg in rx.iter() { + tx.send(msg).unwrap(); + } + }); + } + + for _ in 0..1000 { + let main_tx = main_tx.clone(); + std::thread::spawn(move || { + for _ in 0..msg_num { + main_tx.send(Default::default()).unwrap(); + } + }); + + for _ in 0..msg_num { + main_rx.recv().unwrap(); + } + } +} diff --git a/vendor/flume/examples/select.rs b/vendor/flume/examples/select.rs new file mode 100644 index 0000000..bbe957b --- /dev/null +++ b/vendor/flume/examples/select.rs @@ -0,0 +1,25 @@ +#[cfg(feature = "select")] +use flume::Selector; + +#[cfg(feature = "select")] +fn main() { + // Create two channels + let (red_tx, red_rx) = flume::unbounded(); + let (blue_tx, blue_rx) = flume::unbounded(); + + // Spawn two threads that each send a message into their respective channel + std::thread::spawn(move || { let _ = red_tx.send("Red"); }); + std::thread::spawn(move || { let _ = blue_tx.send("Blue"); }); + + // Race them to see which one sends their message first + let winner = Selector::new() + .recv(&red_rx, |msg| msg) + .recv(&blue_rx, |msg| msg) + .wait() + .unwrap(); + + println!("{} won!", winner); +} + +#[cfg(not(feature = "select"))] +fn main() {} diff --git a/vendor/flume/examples/simple.rs b/vendor/flume/examples/simple.rs new file mode 100644 index 0000000..39cb1bd --- /dev/null +++ b/vendor/flume/examples/simple.rs @@ -0,0 +1,18 @@ +use std::thread; + +fn main() { + let (tx, rx) = flume::unbounded(); + + let t = thread::spawn(move || { + for msg in rx.iter() { + println!("Received: {}", msg); + } + }); + + tx.send("Hello, world!").unwrap(); + tx.send("How are you today?").unwrap(); + + drop(tx); + + t.join().unwrap(); +} |