Hero Background

关于异步编程的思考

更新于 2026-05-14
技术

异步编程简史

从回调函数到 Promise,再到 async/await,异步编程在不断发展。

JavaScript 的演进

JavaScript
// 回调地狱
getData(function(a) {
    getMoreData(a, function(b) {
        getEvenMoreData(b, function(c) {
            console.log(c);
        });
    });
});

// async/await
async function main() {
    const a = await getData();
    const b = await getMoreData(a);
    const c = await getEvenMoreData(b);
    console.log(c);
}

Rust 的 async

Rust 的 async 设计很特别——它是零开销抽象,没有内建运行时。

Rust
use tokio::time::sleep;

#[tokio::main]
async fn main() {
    let handle = tokio::spawn(async {
        sleep(std::time::Duration::from_secs(1)).await;
        println!("background task done");
    });

    println!("waiting...");
    handle.await.unwrap();
}

对比

语言
运行时
特点
JS/TS
Event Loop
单线程,并发靠异步
Rust
Tokio/Smol
零开销,多线程
Python
asyncio
协程模型
Go
Goroutine
有栈协程,自动调度

个人感受

Rust 的 async 学习曲线最陡,但用习惯之后真的很舒服。

©2026 fufu all|