small-map: 一个 SIMD 加速的高效 Rust 小 HashMap 实现
在某些场景下,Rust 程序员会使用 smallstr 和 smallvec 来避免为小规模数据分配堆内存,其原理是尽量使数据直接放在栈上,当数据规模超过其预定大小时回落到堆实现。但是社区并没有类似的 map 实现,所以我写了一个。
如果你想对小规模数据(例如小于 16 个或者 32 个 key/value )做高效查找,又尽量不想付出分配开销时,那么欢迎你使用 small-map 这个 crate !比较推荐的场景是用来处理请求级别的 http header 、RPC header 等。
实现上,通常 hashmap 在内存中是稀疏的,但这种布局并不适用于这个目标场景:我想让其占用的栈内存尽量紧凑。一个最简单的想法是将其实现为包含 SmallVec<[(K, V); N]> 和 HashMap<K, V> 两个分支的 enum 结构,但这样用户在查找时需要付出遍历和大量 key 比较的开销。
参考 SwissTable 的设计,我将其 Group 平铺来达到紧凑的内存布局,并利用相同的 SIMD 运算来加速查找。顺序处理每个 Group 并不会有太大开销,因为 SSE2 下可以一次查找 16 个元素,而我们的使用场景就是 kv 很少的情况,所以本来就预期只有一两个 Group 。
我在一个典型场景下对比了 small-map 、hashbrown 和 std hashmap ,CPU 分别有 25%~43%、25%~54% 的节省(代码仓库中有用到的 bench 代码)。
Github: https://github.com/ihciah/small-map
Crates.io: https://crates.io/crates/small-map
Vivo 发布自研操作系统 BlueOS
Vivo 在开发者大会上发布了全新操作系统 BlueOS,采用 Rust 语言编写。这是业内首个使用 Rust 构建系统框架的操作系统。BlueOS 拥有强大的多模态交互能力,支持语音、图像、文本、视频、手势等多种输入方式。它也将首先部署在 Vivo 最新一代智能手表 Vivo Watch 3 上。
这里是 SPARROWS NEWS 的报道。与国内媒体的报道不同,该文章提供了更多技术细节,如 BlueOS 使用 Rust 语言的原因,以及它在性能和兼容性方面的表现。这标志着业内对 Rust 的进一步认可,相信 BlueOS 能给智能设备带来全新体验。
SPARROWS NEWS: https://sparrowsnews.com/2023/11/01/vivo-unveils-blueos-operating-system/
Rust Binder 驱动程序重写计划
Google 工程师 Alice Ryhl 发布了一系列补丁,目的是用 Rust 重写 Android 的 Binder IPC 机制。Binder 至关重要,直接影响 Android 系统的性能和安全。之所以选择 Rust,是因为它可以帮助降低软件复杂度,编写更健壮的代码。
相关邮件列表讨论见 Rust for Linux。
虽然这只是一个早期的 RFC,但它展示了 Rust 在 Linux 内核中的潜力。Rust 强大的类型系统和所有权机制可以解决 C 中难以处理的问题。待补丁成熟后,或许会带来 Android 系统质的飞跃。
Rust for Linux: https://lore.kernel.org/rust-for-linux/20231101-rust-binder-v1-0-08ba9197f637@google.com/
Rust 周报第 519 期
本周 Rust 周报发布。重点内容有:
- Rust 项目徽标系统故障引发 23,000 个功能回归
- Cargo 不再支持非标准下载方式
- 生成器语法将移除,改用协程
- Rust 分析工具进展报告
详见 This Week in Rust 519: https://this-week-in-rust.org/blog/2023/11/01/this-week-in-rust-519/。
周报还介绍了最新批准的 RFC、事件日历等,是了解 Rust 生态的好材料。
以上就是本期的主要内容。Rust 生态正在蓬勃发展,相信会带来更多惊喜。
请关注我们的更新,以便了解更多有关 Rust 的新闻和动态!
From 日报小组 Cupnfish
社区学习交流平台订阅:
评论区
写评论还没有评论