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

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt383

    数据类型

    protobufthriftprotobufthriftprotobufthriftprotobufthrift
    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产生代码的复杂性,编写的测试代码为了适应其接口,在调用堆栈上可能有一些额外开销。

  • 相关阅读:
    为什么byte取值负128到127.md
    傻傻分不清?Integer、new Integer() 和 int 的面试题
    Spring 面试 7 大问题,你顶得住不?
    消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型?
    poj 3684 Physics Experiment(数学,物理)
    poj 3320 Jessica's Reading Problem(尺取法)
    java面试
    nyoj 234 吃土豆
    Web 通信 之 长连接、长轮询(long polling)
    XHTML使用规范
  • 原文地址:https://www.cnblogs.com/grefr/p/6088053.html
Copyright © 2011-2022 走看看