在 Rust 异步生态中,除了广为人知的 tokio 和 async-std,还有一个非常轻量、简洁但功能强大的运行时——smol。本文将带你从零开始了解并使用 Rust smol 异步运行时,即使你是 Rust 异步编程的新手,也能轻松上手!
smol 是一个极简、快速且跨平台的 Rust 异步运行时。它不依赖任何外部 I/O 库(如 mio),而是直接使用标准库中的线程和系统调用,因此编译体积小、启动速度快,非常适合嵌入式系统、CLI 工具或对资源敏感的项目。
mio 或 tokio,减少二进制体积。首先,在你的 Cargo.toml 文件中添加 smol 依赖:
[dependencies]smol = "2.0" 让我们写一个简单的异步程序,使用 smol 执行两个并发任务:
use smol::Timer;use std::time::Duration;async fn task(name: &str, delay: u64) { println!("{} 开始执行", name); Timer::after(Duration::from_secs(delay)).await; println!("{} 执行完成", name);}fn main() { smol::block_on(async { // 并发运行两个任务 let t1 = smol::spawn(task("任务A", 2)); let t2 = smol::spawn(task("任务B", 1)); // 等待两个任务完成 t1.await; t2.await; });} 运行这段代码,你会看到输出顺序可能是:
任务A 开始执行任务B 开始执行任务B 执行完成任务A 执行完成 这说明两个任务是并发执行的,而不是顺序执行。
smol 提供了几个关键 API,帮助你构建异步应用:
smol::block_on(future):在当前线程阻塞并运行一个异步任务(类似 tokio 的 block_on)。smol::spawn(future):将任务派发到后台线程池执行,返回一个可 await 的 Task。Timer::after(duration):创建一个延迟定时器,常用于模拟 I/O 延迟。Async<T>:包装标准库中的同步类型(如 TcpStream),使其支持异步操作。下面是一个基于 smol 的简单 echo 服务器示例:
use smol::{Async, Task};use std::net::TcpListener;use std::io::{Read, Write};async fn handle_client(mut stream: Async) -> std::io::Result<()> { let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).await?; if n == 0 { break; // 客户端断开连接 } stream.write_all(&buf[..n]).await?; } Ok(())}async fn server() -> std::io::Result<()> { let listener = Async::::bind("127.0.0.1:8080")?; println!("服务器监听在 127.0.0.1:8080"); loop { let (stream, _) = listener.accept().await?; // 为每个客户端启动一个新任务 Task::spawn(handle_client(stream)).detach(); }}fn main() { smol::block_on(server()).unwrap();} 这个例子展示了如何用 Rust smol 异步运行时 构建高性能网络服务。每个客户端连接都会在一个独立的异步任务中处理,不会阻塞主线程。
smol::block_on 内部再次调用 block_on,会导致 panic。smol::spawn(...).detach() 启动“防火并忘记”任务(fire-and-forget)。std::thread::spawn + 通道通信,避免阻塞异步线程。通过本教程,你已经掌握了 smol 教程 的核心内容:从安装、基本用法到构建 TCP 服务器。smol 以其轻量、简洁和高效的特点,成为 Rust 轻量级异步 编程的理想选择。无论你是开发 CLI 工具、微服务还是学习 Rust 异步编程入门,smol 都值得尝试!
提示:smol 的 GitHub 仓库地址为 https://github.com/smol-rs/smol,欢迎查阅官方文档获取更多细节。
本文由主机测评网于2025-12-21发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251210884.html