rust单线程下异步代码的意义

意义雷同于单核多线程的含义

单线程下,可以进行多个异步任务。然后这些异步任务可以是网络请求,这样达到单线层的最大利用化。

extern crate core;


use futures::future::join_all;
use std::time::Instant;

async fn sleep_ms(start: &Instant, id: u64, duration_ms: u64) {
    tokio::time::sleep(std::time::Duration::from_millis(duration_ms)).await;
    println!(
        "future {id} slept for {duration_ms}ms, finished after {}ms",
        start.elapsed().as_millis()
    );
}

#[tokio::main(flavor = "current_thread")]
async fn main() {
    let start = Instant::now();
    let sleep_futures = (1..=10).map(|t| sleep_ms(&start, t, t * 10));
    join_all(sleep_futures).await;
}

sleep_ms的代码可以是网络请求

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rust 语言天生支持多线程编程,它提供了很多标准库和语言特性来方便地实现多线程应用。下面是一些常用的 Rust 多线程编程相关的特性和库: 1. `std::thread` 模块:Rust 提供了一个线程创建和管理的标准库模块。使用该模块可以创建新线程,等待线程执行完毕,以及线程间通信等操作。 2. `std::sync` 模块:该模块提供了多线程编程中常用的同步原语,例如 Mutex、Condvar、Barrier、RwLock 等。这些同步原语可以用于线程之间的互斥访问共享资源、条件变量通信、屏障同步等操作。 3. `std::thread::spawn` 函数:该函数可以用于创建一个新的线程,并在新线程中执行一个闭包。例如: ``` use std::thread; fn main() { let handle = thread::spawn(|| { // 在新线程中执行的代码 println!("Hello, world!"); }); // 主线程继续执行其他代码 // 等待新线程执行完毕 handle.join().unwrap(); } ``` 4. `std::sync::Mutex` 类型:该类型可以用于实现线程间的数据同步。例如: ``` use std::sync::Mutex; fn main() { let counter = Mutex::new(0); let mut handles = vec![]; for _ in 0..10 { let handle = thread::spawn(|| { // 获取 Mutex 的锁 let mut num = counter.lock().unwrap(); // 对共享数据进行修改 *num += 1; }); handles.push(handle); } // 等待所有线程执行完毕 for handle in handles { handle.join().unwrap(); } // 输出最终结果 println!("Result: {}", *counter.lock().unwrap()); } ``` 除了上述特性和库外,Rust 还提供了很多其他的多线程编程相关的语言特性和库,例如 `std::sync::mpsc` 模块用于实现多生产者、单消费者的通道通信,`std::thread::sleep` 函数用于线程睡眠等待等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值