gpt4 book ai didi

json - 戈朗 : Parsing benchmarking between message pack and JSON

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

我们正在开发一个 TCP 服务器,它通过 TCP 接收简单的基于文本的命令(类似于 redis)

我们在使用原始文本命令、JSON 或消息包 (http://msgpack.org/) 之间犹豫不决

一个命令的例子可以是:

文本命令:LOCK some_random_key 1000

JSON 命令:{"command":"LOCK","key":"some_random_key","timeout":1000}

消息包:\x83\xA7command\xA4LOCK\xA3key\xAFsome_random_key\xA7timeout\xCD\x03\xE8

问题:

编辑:我想出了我自己的问题,即解析 JSON 和 MsgPack 之间的速度比较。请在我的回答中查看结果

最佳答案

解析速度比较:

BenchmarkJSON     100000         17888 ns/op
BenchmarkMsgPack 200000 10432 ns/op

我的基准测试代码:

package benchmark

import (
"encoding/json"
"github.com/vmihailenco/msgpack"
"testing"
)

var in = map[string]interface{}{"c": "LOCK", "k": "31uEbMgunupShBVTewXjtqbBv5MndwfXhb", "T/O": 1000, "max": 200}

func BenchmarkJSON(b *testing.B) {
for i := 0; i < b.N; i++ {
jsonB := EncodeJSON(in)
DecodeJSON(jsonB)
}
}

func BenchmarkMsgPack(b *testing.B) {
for i := 0; i < b.N; i++ {
b := EncodeMsgPack(in)
DecodeMsgPack(b)
}
}

func EncodeMsgPack(message map[string]interface{}) []byte {
b, _ := msgpack.Marshal(message)
return b
}

func DecodeMsgPack(b []byte) (out map[string]interface{}) {
_ = msgpack.Unmarshal(b, &out)
return
}

func EncodeJSON(message map[string]interface{}) []byte {
b, _ := json.Marshal(message)
return b
}

func DecodeJSON(b []byte) (out map[string]interface{}) {
_ = json.Unmarshal(b, &out)
return
}

关于json - 戈朗 : Parsing benchmarking between message pack and JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20153020/

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