gob,protobuf,json在golang中的序列化效率對比
阿新 • • 發佈:2020-11-05
先上程式碼:
looptimes:=10000
u:=User{66,"nxin","beijing"}
gobbegintimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
gobbeginint,_:=strconv.Atoi(gobbegintimestamp)
fmt.Println("gob序列化==============================",gobbeginint)
buf := new(bytes.Buffer) //分配記憶體
enc := gob.NewEncoder(buf) //建立基於buf記憶體的編碼器
for i:=0;i<looptimes;i++ {
err := enc.Encode(u) //編碼器對結構體編碼
if err != nil {
log.Fatal(err)
}
}
gobendtimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
gobendint,_:=strconv.Atoi(gobendtimestamp)
fmt.Println("===================END===================",gobendint)
jsonbegintimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
jsonbeginint,_:=strconv.Atoi(jsonbegintimestamp)
fmt.Println("json序列化==============================", jsonbeginint)
for j:=0;j<looptimes;j++ {
_, e := json.Marshal(u)
if e!=nil{
log.Fatal(e)
}
}
jsonendtimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
jsonendint,_:=strconv.Atoi(jsonendtimestamp)
fmt.Println("===================END===================",jsonendint)
protobufbegintimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
protobufbeginint,_:=strconv.Atoi(protobufbegintimestamp)
fmt.Println("protobuf序列化==============================", protobufbeginint)
hw:=&model.Helloworld{10,"wang","beijing"}
for j:=0;j<looptimes;j++ {
_, e := proto.Marshal(hw)
if e!=nil{
log.Fatal(e)
}
}
protobufendtimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
protobufendint,_:=strconv.Atoi(protobufendtimestamp)
fmt.Println("===================END===================",protobufendint)
fmt.Println("json:",jsonendint-jsonbeginint)
fmt.Println("gob:",gobendint-gobbeginint)
fmt.Println("protobuf:",protobufendint-protobufbeginint)
嘗試了100,1000,10000,100000次的序列化對比時間:
總結:
總體來說protobuf的效率最高,gob的效率比json的還要低。
100次時三者相差不大。
=====================================================================
1000次時三者表現不穩地,測試出來的結果:
以前一種出現的次數更多。
=====================================================================
10000次出現的結果,protobuf效率明顯要高,但是json與gob差別不大:
=====================================================================
100000次出現的結果:
protobuf還是明顯優勢,但是gob有點落後。
綜上所述:在資料量小的時候三者差不多,但是資料量大了以後protobuf會更好,但是gob顯得力不從心,json表現中庸