美文网首页我爱编程深入浅出golangGolang
golang专有的gob序列化性能分析

golang专有的gob序列化性能分析

作者: 从火星来 | 来源:发表于2018-06-17 08:29 被阅读39次

为什么要分析gob序列化格式的性能

我自己编的一个单向同步软件(https://gitee.com/rocket049/mysync),混合了RPCHTTP服务器功能,利用RPC做控制功能,HTTP进行数据上传。最近我有意简化其构造,把其中的http上传功能也用RPC方式实现。但是我担忧会导致性能下降,因为通常对象序列化,将会导致数据量增加,例如JSON序列化后,二进制数据变成16进制数据,数据量倍增。因此我测试了gob序列化前后的体量变化。

测试方法

我编写了一个小程序,参数是输入文件,把这个文件转换为一个结构体,其中包含文件名(strring)和所有数据组成的数组([]byte),然后用golang标准库encoding/gob将这个结构体序列化后保存到另一个文件中,然后比较输入文件和输出文件的大小。

测试程序

下面是测试程序的源代码和用法:

import (
    "encoding/gob"
    "io/ioutil"
    "os"
)
type FileAll struct{
    Name string
    Cxt []byte
}
func main(){
    var fa1 FileAll
    var err error
    fa1.Name = os.Args[1]
    fa1.Cxt,err = ioutil.ReadFile( os.Args[1] )
    if err != nil{
        panic(err)
    }
    enc := gob.NewEncoder(os.Stdout)
    enc.Encode(fa1)
}

用法:gob1 输入文件 > 输出文件

测试结果

无论输入文件有多大,输出文件总是比输入文件大50个字节左右,考虑到保存结构体本身的格式信息的耗费,数据量几乎是不增加的。由此可见,gob序列化格式非常适合于网络传输。
基于这个结论,我修改了我程序,把上传文件的过程用RPC方式实现了类似操作系统的文件操作方式:CreateFile->WriteBytes->CloseFile。并且在把文件数据序列化之前,先把文件数据用gzip格式压缩存储在结构体中,进一步减少了对带宽的需求。

相关文章

  • golang专有的gob序列化性能分析

    为什么要分析gob序列化格式的性能 我自己编的一个单向同步软件(https://gitee.com/rocket0...

  • golang标准库中的encoding/gob包

    一、golang中的gob包是什么? gob是golang包自带的一个数据结构序列化的编码/解码工具。 二、go标...

  • Golang Gob编码

    欢迎大家一起交流学习,Q:281286620 gob是Golang包自带的一个数据结构序列化的编码/解码工具。编码...

  • golang标准库中的encoding/gob包

    1、golang中的gob包是什么?2、go标准库中的gob编码规则3、gob包给开发者提供了什么内容?以及怎么使...

  • golang 读写二进制文件(2)

    golang 使用encoding/gob包读写二进制文件 上篇介绍了使用"encoding/binary"包读写...

  • 面试总结

    笔试题 1.如何对Golang程序做性能分析和调优?如何排查Golang程序的内存泄漏? 1)使用golang的工...

  • [序列化]kryo

    背景 最近项目中用到了kryo和protoBuf做序列化,看了java序列化性能分析,两个性能都很高,所以先研究下...

  • Go net/rpc

    Golang官方提供的net/rpc库使用encoding/gob进行编解码,支持TCP或HTTP数据传输方式,由...

  • Golang gob与rpc简介

    本文参考Gob的数据手机网络游戏应用协议设计(一) 关于protobuf基础知识,可以参考Cocos Creato...

  • pprof 工具使用

    pprof golang pprof是golang的可视化和性能分析的工具。其提供了可视化的web页面,火焰图等更...

网友评论

    本文标题:golang专有的gob序列化性能分析

    本文链接:https://www.haomeiwen.com/subject/xaiieftx.html