zoukankan      html  css  js  c++  java
  • protobuf和thrift对比

    数据类型

    protobuf thrift protobuf thrift protobuf thrift protobuf thrift
    double double float     byte   i16
    int32 i32 int64 i64 uint32   uint64  
    sint32   sint64   fixed32   fixed64  
    sfixed32   sfixed64   bool bool string string
    bytes binary message struct enum enum service service

    综合对比

      protobuf thrift
    功能特性 主要是一种序列化机制 提供了全套RPC解决方案,包括序列化机制、传输层、并发处理框架等
    支持语言 C++/Java/Python C++, Java, Python, Ruby, Perl, PHP, C#, Erlang, Haskell
    易用性 语法类似,使用方式等类似
    生成代码的质量 可读性都还过得去,执行效率另测
    升级时版本兼容性 均支持向后兼容和向前兼容
    学习成本 功能单一,容易学习 功能丰富、学习成本高
    文档&社区 官方文档较为丰富,google搜索protocol buffer有2000W+结果,google group被墙不能访问 官方文档较少,没有API文档,google搜索apache thrift仅40W结果,邮件列表不怎么活跃

    性能对比
    由于thrift功能较protobuf丰富,因此单从序列化机制上进行性能比较,按照序列化后字节数、序列化时间、反序列化时间三个指标进行,对thrift的二进制、压缩、protobuf三种格式进行对比。

    测试方法:取了15000+条样本数据,分别写了三个指标的测试程序,在我自己的电脑上执行,其中时间测试循环1000次,总的序列化/反序列化次数1500W+。

    平均字节数

    thrift二进制 535
    thrift压缩 473
    protobuf 477

    序列化(1500W次)时间(ms)

    thrift二进制 306034
    thrift压缩 304256
    protobuf 177652

    反序列化(1500W次)时间(ms)

    thrift二进制 287972
    thrift压缩 315991
    protobuf 157192

    thrift的时间测试可能不是很准,由于thrift产生代码的复杂性,编写的测试代码为了适应其接口,在调用堆栈上可能有一些额外开销。

  • 相关阅读:
    了解及使用IPV6
    天气预报API(六):中国气象频道、腾讯天气--“新编码”接口的测试
    天气预报API(五):城市代码--“新编码”和“旧编码” 对比
    天气预报API(三):免费接口测试(“旧编码”)
    nginx 配置反向代理和静态资源
    centos 7 安装mysql5.7
    java 重新学习 (四)
    java 重新学习 (三)
    java 重新学习 (二)
    h5唤醒手机拨打电话
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318300.html
Copyright © 2011-2022 走看看