常用 crate 生态
问题
Rust 生态中有哪些必知的 crate?
答案
各领域推荐 crate
异步与并发
| crate | 说明 | 场景 |
|---|---|---|
| tokio | 异步运行时 | Web 服务、网络编程 |
| rayon | 数据并行 | CPU 密集计算 |
| crossbeam | 并发工具 | 无锁结构、作用域线程 |
| dashmap | 并发 HashMap | 高并发读写 |
| parking_lot | 锁优化 | 替代 std Mutex |
网络 & Web
| crate | 说明 | 场景 |
|---|---|---|
| reqwest | HTTP 客户端 | API 调用 |
| axum | Web 框架 | REST API |
| tonic | gRPC | 微服务 |
| tower | 服务抽象 | 中间件 |
数据处理
| crate | 说明 | 场景 |
|---|---|---|
| serde + serde_json | 序列化 | JSON 处理 |
| chrono / time | 日期时间 | 时间处理 |
| uuid | UUID 生成 | 唯一标识 |
| rand | 随机数 | 密码学/游戏 |
| bytes | 字节缓冲 | 网络协议 |
数据库
| crate | 说明 | 场景 |
|---|---|---|
| sqlx | 异步 SQL | 编译时检查 SQL |
| diesel | ORM | 类型安全查询 |
| sea-orm | 异步 ORM | ActiveRecord 风格 |
| redis | Redis 客户端 | 缓存 |
开发工具
| crate | 说明 | 场景 |
|---|---|---|
| clap | 命令行解析 | CLI 工具 |
| tracing | 结构化日志 | 可观测性 |
| config | 配置管理 | 多源配置 |
| dotenvy | 环境变量 | .env 文件 |
rayon 并行计算示例
use rayon::prelude::*;
// 将计算密集操作自动并行化
let sum: i64 = (0..1_000_000i64)
.into_par_iter() // 转为并行迭代器
.filter(|&x| x % 2 == 0)
.map(|x| x * x)
.sum();
// 并行排序
let mut data = vec![5, 3, 1, 4, 2];
data.par_sort(); // 多核并行排序
常见面试问题
Q1: tokio 和 rayon 有什么区别?
答案:
| 维度 | tokio | rayon |
|---|---|---|
| 类型 | 异步运行时 | 数据并行 |
| 适用场景 | IO 密集(网络、文件) | CPU 密集(计算) |
| 编程模型 | async/await | 并行迭代器 |
| 线程模型 | 多线程事件循环 | 工作窃取线程池 |
不要在 tokio 异步任务中执行 CPU 密集计算,应该 tokio::task::spawn_blocking 或交给 rayon。
相关链接
- blessed.rs — 社区推荐 crate 列表
- lib.rs — crate 发现平台
- Are we web yet? — Web 生态状态