Folia
← 返回头版

Go 1.24采用Swiss Tables设计重构内置map实现

Go 1.24版本用基于Swiss Tables设计的新实现替换了内置map的运行时架构1。这一改进通过优化数据结构和查询算法,使map操作性能最高提升60%1。

新设计将map组织为由多个group组成的table结构,每个group最多存储8个键值对1。系统采用64位control word来描述每个slot的状态1,并利用两个哈希值H1和H2分别用于计算起始group和过滤group内的slots1。当单个group满载后,map扩展为包含多个group的table1。单个table最多包含128个groups(1024个slots),超出此上限时会分裂成两个新table1。为了管理多个table,系统采用目录结构,通过globalDepth和localDepth分别表示全局和局部深度1。

为了实现高效的组查找,Go使用三角形探测序列进行步长递增搜索1。加载因子的上限设定为7/8(87.5%),保留部分空slots来提高查找效率1。Go 1.27进一步引入了实验性特性mapsplitgroup,通过分离keys和values数组来减少内存占用并改善缓存局部性1。完整应用基准测试显示,与旧实现相比,平均CPU时间改善约1.5%1。


评论