sleep等待x秒
use std::thread::sleep;
use std::time::Duration;
fn main() {
println!("waiting.....");
sleep(Duration::from_secs(5)); // 暂停5秒
println!("done.....");
}
碎碎念:
从Intel的Sandy bridge开始,空间预取器会拉取成对的64字节缓存,也就是128字节缓存是效率最佳的缓存预取单元
cell用法(提供内部可变类型)
不用&mut也可以修改变量的值,一般用在闭包里
use std::cell::Cell;
fn main() {
let counter = Cell::new(0);
let increment = || {
let value = counter.get();
counter.set(value + 1);
};
for _ in 0..5 {
increment();
}
let final_value = counter.get();
println!("Final value: {}", final_value);
}
// Final value: 5
类似go的WaitGroup(挺好用)
use crossbeam::sync::WaitGroup;
use std::time::Duration;
fn main() {
let wg = WaitGroup::new();
for i in 0..10 {
let wg = wg.clone(); // 创建一个waitgroup的克隆,增加引用计数
std::thread::spawn(move || {
println!("thread {} sleeping...", i);
std::thread::sleep(Duration::from_millis(5000));
drop(wg); // 实现了drop trait;删除一个引用计数,认为任务已经完成(如果注释掉这行,wait就不生效了)
});
}
wg.wait(); // 阻塞直到引用计数清空
println!("done...");
}