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

数据类型

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

protobuf和thrift对比的更多相关文章

  1. REST SOAP Thrift 对比

    别人的REST SOAP Thrift对比: 单项分数越高越好 项目 REST SOAP Thrift Extensibility 5 3 1 Neutrality 2 4 3 Independenc ...

  2. 三种通用应用层协议protobuf、thrift、avro对比,完爆xml,json,http

    原文: https://www.douban.com/note/523340109/ Google protobuf: 优点  二进制消息,性能好/效率高(空间和时间效率都很不错)     proto ...

  3. java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能对比

     我们为什么要序列化 举个栗子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放.那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列 ...

  4. 序列化之protobuf与avro对比(Java)

    最近在做socket通信中用到了关于序列化工具选型的问题,在调研过程中开始趋向于用protobuf,可以省去了编解码的过程.能够实现快速开发,且只需要维护一份协议文件即可. 但是调研过程中发现了pro ...

  5. Netty学习(七)-Netty编解码技术以及ProtoBuf和Thrift的介绍

    在前几节我们学习过处理粘包和拆包的问题,用到了Netty提供的几个解码器对不同情况的问题进行处理.功能很是强大.我们有没有去想这么强大的功能是如何实现的呢?背后又用到了什么技术?这一节我们就来处理这个 ...

  6. 解编码框架的比较(protobuf,thrift,Marshalling,xml)

    1.ProtoBuf 特点: 1.结构化数据存储格式 2.高效的解编码性能. 3.语言无关,平台无关,扩展性好. 4.官方支持java,c++,python三种语言. 5.性能比较好 (与之对比xml ...

  7. protobuf高效传输对比json gizp等等

    https://blog.csdn.net/u013929284/article/details/72582215 利用Protocol Buffers可以很好的解决JSON数据在传输方面的不足,它是 ...

  8. grpc 之 word2pdf使用

    ​ 做一个word转pdf的服务,采用grpc,使用libreoffice命令. 1.构建libreoffice镜像 FROM python:3.6 ENV TZ=Asia/Shanghai RUN ...

  9. [Todo]对于thrift和protobuf比较好的描述

    比较跨语言通讯框架:thrift和Protobuf 全部thrift protobuf 前两天想在微博上发表一个观点:在现在的技术体系中,能用于描述通讯协议的方式很多,xml,json,protobu ...

随机推荐

  1. ORACLE - 管理重做日志文件

    ORACLE重做日志文件用于在数据库崩溃等情况下用于恢复数据,默认情况下为三个文件redo01.log/redo02.log/redo03.log,文件组循环使用,在录入与更新操作比较多的应用中,日志 ...

  2. Java设计模式汇总

    Java设计模式汇总 设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式. ...

  3. 笔记本电脑连接上WiFi后,弹不出登录界面怎么办?

    以CMCC为例子 步骤: 1 连接成功CMCC之后,打开适配器设置.右击无线网卡,选择属性 2.双击INTERNET协议版本4 3.将DNS改成自动获取,然后确定 4.再确定 5.然后重新断开CMCC ...

  4. node-xlsx

    1.安装 必要组件 npm install node-xlsx -S /*Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator.Generator ...

  5. TCP/IP拥塞控制

    TCP/IP拥塞控制包括:慢启动和拥塞避免.其操作流程如下所述: 初始化.拥塞窗口cwnd = 1,慢启动门限ssthresh = 65535 如果没有发生拥塞 若 cwnd < ssthres ...

  6. jQuery相关知识总结一

    1day-jquery 1. 1 jQuery 1概念 * JavaScript(ECMA/DOM/BOM)在实际开发中,使用比较麻烦,有浏览器兼容问题. * JavaScript类库(JS库) 的目 ...

  7. [算法题] Reverse Linked List II

    题目内容 题目来源:LeetCode Reverse a linked list from position m to n. Do it in-place and in one-pass. For e ...

  8. python爬虫url带中文解决方案之一

    import urllib2 urllib2.quote("呵呵哒") #输出 '%BA%C7%BA%C7%DF%D5'

  9. Qt图片按原比例缩放

    1.选择图片 QString strFilePath = QFileDialog::getOpenFileName(this, tr("Select file"), QStanda ...

  10. Java 环境设置

    Java 环境设置 本地环境设置 如果你依然想要为 Java 编程语言设置环境,那么本节将指导你如何在你的电脑上下载和设置 Java.请按照以下步骤进行环境设置. Java SE 可以从下载 Java ...