跳到主要内容

常用 crate 生态

问题

Rust 生态中有哪些必知的 crate?

答案

各领域推荐 crate

异步与并发

crate说明场景
tokio异步运行时Web 服务、网络编程
rayon数据并行CPU 密集计算
crossbeam并发工具无锁结构、作用域线程
dashmap并发 HashMap高并发读写
parking_lot锁优化替代 std Mutex

网络 & Web

crate说明场景
reqwestHTTP 客户端API 调用
axumWeb 框架REST API
tonicgRPC微服务
tower服务抽象中间件

数据处理

crate说明场景
serde + serde_json序列化JSON 处理
chrono / time日期时间时间处理
uuidUUID 生成唯一标识
rand随机数密码学/游戏
bytes字节缓冲网络协议

数据库

crate说明场景
sqlx异步 SQL编译时检查 SQL
dieselORM类型安全查询
sea-orm异步 ORMActiveRecord 风格
redisRedis 客户端缓存

开发工具

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 有什么区别?

答案

维度tokiorayon
类型异步运行时数据并行
适用场景IO 密集(网络、文件)CPU 密集(计算)
编程模型async/await并行迭代器
线程模型多线程事件循环工作窃取线程池

不要在 tokio 异步任务中执行 CPU 密集计算,应该 tokio::task::spawn_blocking 或交给 rayon。

相关链接