gpt4 book ai didi

performance - 结构的高效二进制编码

转载 作者:IT王子 更新时间:2023-10-29 01:39:14 25 4
gpt4 key购买 nike

我有一个发送udp数据包的程序。数据包数据报由以下结构表示(注意数据包的大小不固定):

type packet struct {
dataLength uint16
id [8]byte
pairity, shards, flags byte
blob []byte // length defined by dataLength
}

我使用编码/二进制包进行序列化/反序列化,但效率不够(使用 pprof)。它浪费了很多 CPU 时间,因此我无法利用整个网络速度。

例如,考虑以下代码:

packet := packet{
dataLength: 4,
id: [8]byte{1,2,3,4,5,6,7,8},
pairity: 10,
shards: 50,
flags: 200,
blob: []byte{1,2,3,4},
}
bufToSendOverNetwork := packet.ToBytes()

执行此操作(以及 .FromBytes 操作)最有效的方法是什么

最佳答案

encoding/binary.Write 使用反射,所以它会比手动构造缓冲区的任何东西都慢。下面是此类函数的示例:

import (
"encoding/binary"
)

func (p *packet) ToBytes() []byte {
buff := make([]byte, 2 + 8 + 3 + len(p.blob))

binary.BigEndian.PutUint16(buff[:2], p.dataLength)
copy(buff[2:10], p.id[:])
buff[10] = p.pairity
buff[11] = p.shards
buff[12] = p.flags
copy(buff[13:], p.blob)

return buff
}

关于performance - 结构的高效二进制编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36226638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com