Rust

2025年11月03日更新 13 人订阅
原价: ¥ 6 限时优惠
专栏简介

煮咖啡里的大学问:用 Rust Async/Await 告诉你如何边烧水边磨豆

煮咖啡里的大学问:用RustAsync/Await告诉你如何边烧水边磨豆你是否曾经想过,为什么有些程序在处理多个任务时会“卡住”?就像煮咖啡时,必须等水完全烧开才能去磨豆子一样,传统的同步代码一步步执行,效率低下。在追求高性能的今天,这显然无法满足我们的需求。本文将带你走进Rust的异步

煮咖啡里的大学问:用 Rust Async/Await 告诉你如何边烧水边磨豆

你是否曾经想过,为什么有些程序在处理多个任务时会“卡住”?就像煮咖啡时,必须等水完全烧开才能去磨豆子一样,传统的同步代码一步步执行,效率低下。在追求高性能的今天,这显然无法满足我们的需求。本文将带你走进 Rust 的异步世界,通过三个由浅入深的实战示例,从最基础的同步逻辑,到 async/await 语法,再到利用 tokio::join! 实现真正的并发,让你亲手揭开 Rust 高性能并发编程的神秘面纱。

实操

创建项目

cargo new async_await_demo
    Creating binary (application) `async_await_demo` package
note: see more `Cargo.toml` keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

切换到项目目录

cd async_await_demo

Cursor编辑器打开项目

cc # open -a cursor .

示例一

#![allow(unused)]

// Async / await

fn g1() -> u32 {
    1
}

fn g2() -> u32 {
    2
}

fn g3() -> u32 {
    3
}

// Make coffee
fn f() {
    // Boil water
    let a = g1();
    // Grind coffee beans
    let b = g2();
    // Pour hot water on coffee grinds
    let c = g3();
}

fn main() {
    f();
}

这段代码展示了一个基本的 同步 执行流程。程序从 main 函数开始,调用了 f 函数。在 f 函数内部,它模拟了“制作咖啡”的三个步骤:它首先调用 g1 函数(如同“烧水”),然后调用 g2 函数(如同“磨咖啡豆”),最后调用 g3 函数(如同“冲泡”)。最关键的一点是,这些函数调用是 按顺序依次执行 的:g2 必须等到 g1 完成后才能开始,而 g3 必须等到 g2 完成。整个过程就像一条单行道,所有任务排队等待,一个接一个地完成。

示例二

#![allow(unused)]

// Async / await

async fn g1() -> u32 {
    println!("g1 function called");
    1
}

async fn g2() -> u32 {
    println!("g2 function called");
    2
}

async fn g3() -> u32 {
    println!("g3 function called");
    3
}

// Make coffee
async fn f() -> (u32, u32, u32) {
    println!("f function called");
    // Boil water - returns Future
    let a = g1().await;
    // Grind coffee beans
    let b = g2().await;
    // Pour hot water on coffee grinds
    let c = g3().await;

    (a, b, c)
}

#[tokio::main]
async fn main() {
    let (a, b, c) = f().await;
    println!("Coffee is ready: {} {} {}", a, b, c);
}

这段代码展示了 异步 (asynchronous) 编程的基本用法。...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论