数据:字典的数据竞争问题

本文探讨了在字典中使用int key而非字符串带来的性能优势,解释了字典嵌入存储如何减轻垃圾回收压力,并分析了键值存储方式对垃圾回收的影响。通过测试,强调了理解字典实现细节对于优化大规模数据处理的重要性。
摘要由CSDN通过智能技术生成

使用int key

使用整数key比使用字符串key要快,这个很正常。makemap函数会检查key和value的长度,默认长度是128字节,也就是说小于或者等于128字节它会把数据直接拷贝到字典里面去,如果是整数的话整个key都在字典中,如果字符串只有两个数据结构指针和长度在字典中,指针还指向另外一个数组。很显然读取key的时候分成两步,先在字典里面读取字符串头信息再读取字符串的内容。比起int直接读出来性能肯定有差异的。

所以某些时候不需要用字符串当作key,因为很多数据的key不见得是字符串,比如有一个全局的序号生成器,未必是自增的,但需要保持全局有唯一的id,用id做key,访问效率要高很多。

var (
    intKeys []int
    strKeys []string

    m1 map[int]struct{}
    m2 map[string]struct{}
)

func init() {
    for i := 0; i < 100000; i++ {
        intKeys = append(intKeys, i)
        strKeys = append(strKeys, strconv.Itoa(i))
    }

    m1 = make(map[int]struct{})
    m2 = make(map[string]struct{})
}

func testI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值