替换标准库的map实现,SwissTable更快?

替换标准库的map实现,SwissTable更快?

💡 原文中文,约6400字,阅读约需16分钟。
📝

内容提要

在最新的Go开发团队会议上,讨论了Google3对SwissTable的性能评估,可能值得跟进。SwissTable是谷歌开源的哈希表实现,已在Google内部大量使用,并在其他语言中也有应用。Go开发团队考虑在未来版本中替换标准库的map。SwissTable采用封闭哈希方案,对CPU缓存更友好,通过SSE指令并行比较短哈希。在性能测试中,SwissTable在大量key值的情况下表现优异,同时节省内存并采用快速求余算法。

🎯

关键要点

  • Go开发团队讨论了Google3对SwissTable的性能评估,可能值得跟进。
  • SwissTable是谷歌开源的哈希表实现,已在Google内部大量使用。
  • Go开发团队考虑在未来版本中替换标准库的map。
  • SwissTable采用封闭哈希方案,对CPU缓存更友好,并通过SSE指令并行比较短哈希。
  • 在性能测试中,SwissTable在大量key值的情况下表现优异,节省内存并采用快速求余算法。
  • Google3是谷歌的单体代码仓库,95%的代码都在此仓库下。
  • SwissTable被大量采用替换std:unordered_map,并在Rust语言中有实现。
  • Go开发团队关注SwissTable,可能在未来版本实现并替换标准库的map。
  • 内建的map采用开放寻址法,查找时需要遍历桶中的元素。
  • SwissTable使用封闭哈希方案,每个哈希值有自己的槽,查找更高效。
  • SwissTable的元数据独立存储,支持快速检查,且对CPU缓存友好。
  • 在key数量较少时,swiss的优势不明显,但在key数量较多时表现优异。
  • swiss库在内存占用上更节省,采用快速求余算法减少内存浪费。
➡️

继续阅读