use futures_util::stream::StreamExt;
use rs2_stream::rs2::*;
use tokio::runtime::Runtime;
fn compute_fibonacci(n: u64) -> u64 {
match n {
0 => 0,
1 => 1,
_ => compute_fibonacci(n - 1) + compute_fibonacci(n - 2),
}
}
fn main() {
let rt = Runtime::new().unwrap();
rt.block_on(async {
println!("🚀 Demonstrating parallel mapping operations");
let numbers = (20..30).collect::<Vec<u64>>();
println!(
"Processing Fibonacci calculations for numbers: {:?}",
numbers
);
println!("\n📊 Example 1: Using map_parallel_rs2 with automatic concurrency");
let start = std::time::Instant::now();
let results = from_iter(numbers.clone())
.map_parallel_rs2(|n| {
println!(
" Computing Fibonacci for {} on thread {:?}",
n,
std::thread::current().id()
);
compute_fibonacci(n)
})
.collect::<Vec<_>>()
.await;
let elapsed = start.elapsed();
println!("✅ Completed in {:.2?}", elapsed);
println!("Results: {:?}", results);
println!("\n📊 Example 2: Using map_parallel_with_concurrency_rs2 with custom concurrency");
let concurrency = 2; println!(" Using concurrency level: {}", concurrency);
let start = std::time::Instant::now();
let results = from_iter(numbers.clone())
.map_parallel_with_concurrency_rs2(concurrency, |n| {
println!(
" Computing Fibonacci for {} on thread {:?}",
n,
std::thread::current().id()
);
compute_fibonacci(n)
})
.collect::<Vec<_>>()
.await;
let elapsed = start.elapsed();
println!("✅ Completed in {:.2?}", elapsed);
println!("Results: {:?}", results);
println!("\n📊 Example 3: Sequential processing for comparison");
let start = std::time::Instant::now();
let results = from_iter(numbers.clone())
.map_rs2(|n| {
println!(
" Computing Fibonacci for {} on thread {:?}",
n,
std::thread::current().id()
);
compute_fibonacci(n)
})
.collect::<Vec<_>>()
.await;
let elapsed = start.elapsed();
println!("✅ Completed in {:.2?}", elapsed);
println!("Results: {:?}", results);
});
}