Ruby 小 Hash 的加速秘密
Speeding Up (Small) Ruby Hashes
Ruby 的 Hash 在条目少于 8 个时,本质上是一个键值对数组,而非真正的哈希表。这种设计虽然节省空间,但查找性能是 O(n) 的线性搜索,导致访问末尾元素明显变慢。本文深入探讨了如何利用 SWAR 技术,将 8 字节的查找操作转化为 CPU 寄存器内的并行计算,从而实现 O(1) 的查找速度。通过位运算技巧,我们可以在不牺牲内存优势的前提下,让小型 Hash 的查找效率媲美大型 st_table。
使用 ar_table 与 st_table 是你经典的以空间换时间的权衡。