有关於并行和并发的定义每个人可能有不一样的解释
Rust以安全高效处理并行程序设计着称
use std::thread;
use std::time::Duration;
fn main() {
thread::spawn(|| {
for i in 1..10 {
println!("{}", i);
thread::sleep(Duration::from_millis(1)); // 让执行短暂sleep一下
}
});
thread::sleep(Duration::from_millis(5)); // 让执行短暂sleep一下
}
透过范例可以看到印出来并不是如预期的都会把1-10印出来,主要是因为main已经执行完退出造成新建的执行绪还没跑完就被中断了,虽然可以透过更久的sleep让main晚点退出但是有更好的作法
use std::thread;
use std::time::Duration;
fn main() {
let handle = thread::spawn(|| {
for i in 1..10 {
println!("{}", i);
thread::sleep(Duration::from_millis(1)); // 让执行短暂sleep一下
}
});
handle.join().unwrap(); // (Blocking)让全部执行完才继续往下
}
透过储存thread::spawn回传的数值为变数,可以修正产生的执行绪完全没有执行或没有执行完成的问题。handle呼叫join方法来确保产生的执行绪会在main离开之前完成
闭包透过move让thread::spawn执行绪可以使用其他执行绪的资料。
use std::thread;
fn main() {
let v = vec![1, 2, 3];
let handle = thread::spawn(move || { // 透过move让执行绪可以拥有v变数的所有权
println!("{:?}", v);
}); // 在这个执行绪执行完之前v所有权都不会释放
handle.join().unwrap();
}
<<: Day 23: WAF web ACL、rules group建立
>>: [NestJS 带你飞!] DAY20 - File Upload
延续前一天的程序码,在程序码後面加上以下三行程序码,他就会用前一天做出来的日收盘价计算出均线(预设算...
上一篇我们的基因体时代-AI, Data和生物资讯 Day27-进阶人工智慧在分子生物学之应用又是明...
ID选择器(ID selector) : 符合指定id的HTML元素做为要套用样式规则的对象,命名格...
透过 x-data 宣告一个 Alpine 元件後就可以来操作里面的内容啦!今天会大略介绍一些比较常...
tags: 铁人赛 SMTP gmail 中部粽 前情提要 昨天,我们一边执行程序码、一边产生 lo...