返回文章列表

文章

关于Rust的运行时

目录
  1. Rust 运行时 & 异步生态全景(含 C/C++ 对比)
  2. 1️⃣ Rust 语言层面的运行时 vs C/C++
  3. 2️⃣ async/await 与 Future
  4. 3️⃣ 异步运行时库
  5. 4️⃣ Tokio 本质
  6. 5️⃣ 异步生态总结对比
  7. ✅ 总结

Rust 运行时 & 异步生态全景(含 C/C++ 对比)#

1️⃣ Rust 语言层面的运行时 vs C/C++#

功能Rust 标准库 runtimeC/C++说明
内存分配默认 allocator(jemalloc 或系统 allocator)malloc/free两者都需要分配器
panic/异常panic! → unwind 或 abortC++ 异常 throw / C 直接 return/setjmp-longjmpRust 可以选择 abort 去掉栈展开,C++ 异常依赖编译器 runtime
线程与 TLSstd::thread + TLSpthread 或 OS API基础线程和 TLS 支持,Rust 更语言级封装
数组越界/整数溢出检查debug 模式下 runtime check无默认检查Rust 额外保证安全性,C/C++ 默认不检查
异步运行时,需要 Tokio/async-std 等库都不提供语言级异步调度
标准库 I/O阻塞 std::net / std::fs阻塞 POSIX / Win32 APIRust 封装成类型安全接口,但底层也是阻塞系统调用

总结:Rust runtime 更轻量、更安全,允许去掉 panic unwind 和堆分配实现“零运行时”。C/C++ runtime 更接近系统,安全性和抽象较弱。


2️⃣ async/await 与 Future#

  • Rust:
    • async fn → Future 状态机(惰性)
    • 语言本身不执行,需要 runtime
  • C/C++:
    • 标准库没有 async/await
    • C++20 引入 coroutines,但也只是生成协程对象,需要用户或库提供 scheduler 才能执行

类比:Rust 的 async/await + Future = C++ coroutine + 用户调度器,但 Rust 更系统化。


3️⃣ 异步运行时库#

特点对比 C/C++
Tokio高性能、多线程 work-stealing、I/O Reactor类似于 C++ ASIO + 自己写的线程池 + Reactor
async-std标准库风格、易用更像简单的单线程协程库
作用执行 Future,管理任务和 I/OC/C++ coroutine 也需要类似 runtime 或框架才能执行

4️⃣ Tokio 本质#

  • 任务调度器 + 异步 I/O 事件循环 + 线程池
  • 没有 Tokio,Rust 的 Future 永远不会执行
  • 类比 C++:
    • Boost.Asio / libuv / libevent + 自己的协程 scheduler
    • 需要自己手动轮询协程,Tokio 集成了这些功能并提供生态

5️⃣ 异步生态总结对比#

方面RustC/C++
标准库 async无 runtime,只提供 Future 状态机C++20 coroutine 也只提供协程对象
异步运行时Tokio / async-std / smollibuv / Boost.Asio / 自己实现调度器
任务调度内置 scheduler(Tokio)自己写线程池 + reactor 或使用库
安全性高(内存安全 + panic unwind 可控)低(需要手动管理内存、异常安全)

✅ 总结#

  • Rust 核心 runtime 很轻量、安全,可选去掉
  • Rust 标准库 不提供异步运行时,async/await 只生成 Future
  • Tokio 是库级运行时:任务调度 + Reactor + 线程池
  • C/C++ 没有内置 async runtime,类似功能需要自己实现或依赖库
  • Rust 异步生态成熟,尤其 Tokio 让高性能网络服务变得可行