Swiss Table:Go map 背后的高效 Hash 表
为什么值得单独讲
Hash 表的性能通常取决于两件事:冲突发生后如何找下一个候选位置,以及这些候选位置离缓存有多远。传统链式哈希把冲突元素串成链表,逻辑简单,但一次查询可能要跳过多个指针;普通开放寻址没有指针跳跃,却常常只能逐个 slot 检查。
Swiss Table 的核心贡献是在开放寻址表前面加了一层非常小的元数据,让 CPU 能按 group 批量排除大量不可能匹配的 slot。它不改变 hash 表的基本语义,而是改变查找、插入、删除时的观察方式:先用极小的哈希指纹过滤,再对少数候选 key 做精确比较。
这个设计来自 Google 的工程实践,后来成为 Abseil flat_hash_map 的底层实现,也被 Rust 标准库 HashMap 采用。Go 1.24 之后,内置 map 的默认运行时实现也切换到了 Swiss Table 风格。





