golang專有的gob序列化效能分析

來源:互聯網
上載者:User

為什麼要分析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格式壓縮儲存在結構體中,進一步減少了對頻寬的需求。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.