Go游戏服务器开发的一些思考(四十):cstruct-go与gogoprotobuf

本文探讨了在Go游戏中使用cstruct-go与gogoprotobuf进行序列化的性能差异。通过基准测试发现,cstruct-go在处理slice时性能较慢,主要原因是频繁使用append操作。而gogoprotobuf在编码和解码时仅进行一次内存分配。通过对cstruct-go的优化,性能得到显著提升,降低了800ns的操作时间。cstruct-go的优势在于无需定义protobuf协议,直接使用struct,但功能相对精简,未实现压缩和其他语言的支持。
摘要由CSDN通过智能技术生成

初次基准测试

图1

可以看到,cstruct-go比gogoprotobuf慢600+ns

于是,github上,看了下gogoprotobuf代码

发现,主要区别在于对slice的用法上

append vs make(,fixedsize)

对照下,发现

  1. gogoprotobuf对slice做的2件事:

    • 在encode只做了一次make内存分配
    • 在decode对每个slice类型,只做一次make内存分配
  2. cstruct-go对slice操作:

    • 每次均是append操作

于是,仿照gogoprotobuf对cstruct-go做了对应的调整。

再次基准测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fananchong2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值