use ibuf::{MBuf, MPool};
use std::sync::Arc;
use std::thread;
fn main() {
concurrent_processing();
large_data_stream();
}
fn concurrent_processing() {
let pool = Arc::new(MPool::new(100, 4096));
let mut handles = vec![];
for i in 0..10 {
let pool = pool.clone();
handles.push(thread::spawn(move || {
let mut buf = pool.alloc();
buf.append(format!("Thread {} data", i).as_bytes());
thread::sleep(std::time::Duration::from_millis(100));
pool.free(buf);
}));
}
for handle in handles {
handle.join().unwrap();
}
println!("并发处理完成");
}
fn large_data_stream() {
let pool = MPool::new(10, 1024);
let large_data = vec![b'A'; 5 * 1024 * 1024];
let start = std::time::Instant::now();
let mut processed = 0;
while processed < large_data.len() {
let chunk_size = std::cmp::min(1024, large_data.len() - processed);
let chunk = &large_data[processed..processed + chunk_size];
let mut buf = pool.alloc();
buf.append(chunk);
process_large_data(&buf);
pool.free(buf);
processed += chunk_size;
}
println!("处理完成 {} bytes, 耗时 {:?}",
large_data.len(),
start.elapsed());
}
fn process_large_data(buf: &MBuf) {
let _len = buf.len();
}