Ruby内部机制:哈希表与闭包的深度解析
1. 哈希表:Ruby内部的主力军
哈希表在Ruby内部扮演着至关重要的角色,理解它能帮助我们深入掌握Ruby的工作原理。
1.1 哈希表性能测试
通过运行特定代码,我们对哈希表的性能进行了测试。测试结果以图表形式呈现,其中y轴表示毫秒,x轴以对数刻度显示哈希表中的元素数量。
当哈希表中的元素较少时,检索10,000个值的速度非常快,时间短到在图表中几乎无法显示,大约只需1.5毫秒。然而,当元素数量超过100,尤其是达到1000时,加载10,000个值所需的时间会随着哈希表大小线性增加。对于包含约10,000个元素的哈希表,加载10,000个值需要超过1.6秒。如果继续测试更大的哈希表,加载值可能需要数分钟甚至数小时。
出现这种情况的原因是,使用较差的哈希函数时,所有哈希元素都会被保存到同一个桶中,这迫使Ruby逐个搜索键列表。
1.2 Ruby 2.0的哈希优化
从Ruby 2.0版本开始,引入了新的优化机制,以提高哈希表的性能。对于包含6个或更少元素的哈希表,Ruby会避免计算哈希值,而是直接将哈希数据保存到数组中,这种哈希表被称为打包哈希。
以下是打包哈希的内部结构示例:
st_table
type
real_entries
entries
RHash
tbl
:key => value
:key2 => value2
:key3 => value3
:key4 => value4
:key5 => value