fury,protostuff 等协议性能测试对比

news2024/11/27 4:17:34

简单介绍:
序列化框架是系统通信的基础组件,在大数据、AI 框架和云原生等分布式系统中广泛使用。当对象需要跨进程、跨语言、跨节点传输、持久化、状态读写、复制时,都需要进行序列化,其性能和易用性影响运行效率和开发效率。
Fury 是一个基于 JIT 动态编译和零拷贝的多语言序列化框架,支持 Java/Python/Golang/JavaScript/C++ 等语言,提供全自动的对象多语言 / 跨语言序列化能力。
而提到protostuff,就要先提到Protocol Buffer,它是谷歌出品的一种数据交换格式,独立于语言和平台,类似于json。Google提供了多种语言的实现:java、c++、go和python。对象序列化城Protocol Buffer之后可读性差,但是相比xml,json,它占用小,速度快。适合做数据存储或 RPC 数据交换格式,相对我们常用的json来说,Protocol Buffer门槛更高,因为需要编写.proto文件,再把它编译成目标语言,这样使用起来就很麻烦。但是现在有了protostuff之后,就不需要依赖.proto文件了,他可以直接对POJO进行序列化和反序列化,使用起来非常简单。
今天,我们来做下性能评测:
在这里插入图片描述

fury
官网:https://furyio.org
开源地址:https://github.com/alipay/fury
使用引入:

 implementation 'org.furyio:fury-core:0.1.0-SNAPSHOT'

protostuff:
官网:https://protostuff.github.io/
开源地址:https://github.com/protostuff/protostuff
使用引入:

    implementation group: 'io.protostuff', name: 'protostuff-core', version: '1.8.0'
    implementation group: 'io.protostuff', name: 'protostuff-runtime', version: '1.8.0'

测试设备: win11, 8core,16g memory,
JDK:

openjdk version "11.0.16.1" 2022-08-16
OpenJDK Runtime Environment TencentKonaJDK (build 11.0.16.1+2)
OpenJDK 64-Bit Server VM TencentKonaJDK (build 11.0.16.1+2, mixed mode)

用游戏中高频调用的技能回包做样本,大小范围在512 bytes~1024 bytes,

SkillFire_S2C_Msg[attackerId=1833436122,harmList={HarmDTO[curHp=7557680.5,dead=true,maxHp=7276256.5,real=50382,targetId=1825720823,type=97,value=63549.6],HarmDTO[curHp=2986297.2,dead=true,maxHp=8404842.0,real=89296,targetId=1727245549,type=58,value=51803.74],HarmDTO[curHp=4064384.2,dead=true,maxHp=862263.3,real=11350,targetId=1337388443,type=4,value=6976.12],HarmDTO[curHp=3296058.5,dead=false,maxHp=2449570.5,real=74893,targetId=1757445513,type=44,value=37778.13],HarmDTO[curHp=6212545.0,dead=false,maxHp=7119135.0,real=38610,targetId=1724187257,type=41,value=30361.45],HarmDTO[curHp=5726974.5,dead=false,maxHp=7947759.5,real=1299,targetId=1450442553,type=94,value=69250.14],HarmDTO[curHp=4976733.5,dead=true,maxHp=9860293.0,real=46306,targetId=1324520518,type=2,value=54894.24],HarmDTO[curHp=8698692.0,dead=false,maxHp=3279770.8,real=55874,targetId=1554818116,type=88,value=69794.31],HarmDTO[curHp=5918141.5,dead=false,maxHp=158892.81,real=78468,targetId=1575461297,type=97,value=72174.01]},index=30,param1={2796842,9310196,2734093},skillCategory=ATTACKED_PASSIVE]

对fury和protobuff 从包的大小和吞吐量两个指标做了性能对比:

Benchmark                           Mode   Cnt     Score            Error  Units       bytes
ProtoBenchMark.furyDeserialize      thrpt    5      2599792.187 ± 251936.135  ops/s       776       
ProtoBenchMark.furySerialize         thrpt    5     3176333.674 ± 101602.041  ops/s       280
ProtoBenchMark.protostuffDeserialize  thrpt    5    185185.430   ± 35112.674    ops/s     776
ProtoBenchMark.protostuffSerialize     thrpt    5   150011.192   ±  72814.166    ops/s    141

图形对比:
在这里插入图片描述

结论:
吞吐量对比,序列化上,fury 是protostuff 21.18 倍,反序列化上 fury 是protostuff 的14倍,完胜!
包体压缩比上,fury 是 protostuff 的 36.08%> 18.17 % , 大了一倍左右。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/764394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

管理本地用户和组

管理本地用户和组 描述用户和组 用户 用户账户用于运行命令的不同人员与程序之间提供安全界限。 使用id显示有关当前登录用户信息 [rootservera ~]# id uid0(root) gid0(root) groups0(root) contextunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023查找其他用户基本…

[STM32教程]01如何开始准备hal库的开发环境

文章目录 概述1、认识硬件环境1.1 ARM简介1.2 STM32简介 2. 软件开发环境准备2.1 Keil MDK安装2.2 安装STM32Cube MX2.3 安装STM32 HAL库2.4 St-Link V2使用 总结 概述 本文介绍如何准备stm32f103的hal库工程开发环境,包括cubemx安装、keil mdk安装、stm32 hal库安…

小程序引入阿里云矢量图库图标

简介 阿里云矢量图库(Aliyun Vector Icon Library)是阿里云提供的一个图标库,为开发者和设计师提供了丰富的矢量图标资源,用于在网页、移动应用和其他设计项目中使用。 使用阿里云矢量图库,你可以快速搜索、选择和下…

如何设置反馈点

如何设置反馈点 前面的POWER DC仿真都是忽略反馈线进行的仿真,如果单板压降不过,电源会自动调整输出电压,来满足负载的得到额定的电压. 仿真上也可以自己添加反馈点,以得到抬高后的电源输出电压值 具体操作如下 同样以下图的CPU的Core电源为例 按照流程正常设置好参数

携程ANR 优化实践 - Binder开辟线程数过多导致主线程ANR异常

了解携程ANR前,我们一起了解 binder 线程池的前生今世 在android系统中,通过binder进行IPC时,服务端总是会起一些Binder线程来响应客户端的请求。这里面就涉及到通过BInder线程池 开辟binder线程 那这些Binder线程又是如何创建,如…

已解决YOLOv5训练报错:RuntimeError: Expected all tensors to be on the same device......

这是发生在集成一个yolov5中没有的检测头head的情况下发生的错误,出现的时候是已经训练起来了,在训练结束时发生的报错,下面是我的解决办法。 1、问题出现及分析排查 改yolov5的网络进行训练时出的报错: RuntimeError: Expected all tenso…

步进电机控制

步进电机控制 #include "./stepper/bsp_stepper_init.h" #include "./delay/core_delay.h" #include "stm32f4xx.h"void TIM_SetTIMxCompare(TIM_TypeDef *TIMx,uint32_t channel,uint32_t compare); void TIM_SetPWM_period(TIM_TypeDef* TI…

Python爬虫学习笔记(五)————JsonPath解析

目录 1.JSONPath —— xpath在json的应用 2.JSONPath 表达式 3.jsonpath的安装及使用方式 4.jsonpath的使用 5.JSONPath语法元素和对应XPath元素的对比 6.实例 (1)商店案例 (2) 解析淘票票的“城市选择”数据 1.JSONPath…

Java8实战-总结3

Java8实战-总结3 基础知识流多线程并非易事 默认方法 基础知识 流 几乎每个Java应用都会制造和处理集合。但集合用起来并不总是那么理想。比方说,从一个列表中筛选金额较高的交易,然后按货币分组。需要写一大堆套路化的代码来实现这个数据处理命令&…

cocos creator Richtext点击事件

组件如图 添加ts自定义脚本,定义onClickFunc点击方法: import { Component, _decorator} from "cc";const { ccclass } _decorator; ccclass(RichTextComponent) export class RichTextComponent extends Component{public onClickFunc(even…

reggie优化02-SpringCache

1、SpringCache介绍 2、SpringCache常用注解 package com.itheima.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.itheima.entity.User; import com.itheima.service.UserService; import lombok.extern.slf4j.Slf4j; imp…

Mybatis:传参+提交事务(自动or手动)+sql多表关联查询(两种方法)

目录 一、参数两种类型: 二、传参的几种方法: 三、提交事务 四、sql多表关联查询(两种方法) 一、参数两种类型: 1.#{参数}:预编译方式,更安全,只用于向sql中传值; select * from admin w…

getattr, __getattr__, __getattribute__和__get__区别

一、getattr() 和另外三个方法都是魔法函数不同的是,getattr()是python内置的一个函数,它可以用来获取对象的属性和方法。例子如下: class A():a 5def __init__(self, x):self.x xdef hello(self):return hello funca A(10)print(getattr(a, x)) #…

2023 双非本科三个月互联网找实习心路历程

双非本科三个月互联网找实习心路历程 1、实习面试准备2、面试日历(1)开发投递(2)线下宣讲(3)转投测试,机会多多 3、同窗现状4、货拉拉 offer 的故事5、我的闲言6、我的收获(1)勇气&a…

2.5 线性表的建表

1. 顺序表建表 #include <iostream>/// <summary> /// 数组最大长度 /// </summary> const int MAX_SIZE 10;/// <summary> /// 顺序表建表 /// </summary> /// <param name"arr">数组</param> /// <param name"…

万达商管IPO:看似轻舟已过万重山,实则负重前行?

近日&#xff0c;继万达商管债券发行计划被终止、证监会质疑万达商场销售数据真实性、珠海万达商管的股权被法院冻结后又解冻&#xff0c;万达商管又遇“水逆”——惠誉发布报告下调万达商管的评级&#xff0c;并认为珠海万达商管可能无法在2023年底前完成上市。 纷至沓来的负…

什么是链路跟踪 Skywarking

什么是链路跟踪 Skywarking 链路跟踪&#xff08;Link Tracing&#xff09;是一种用于追踪分布式系统中请求路径和性能的技术。SkyWalking 是一个开源的 APM&#xff08;Application Performance Monitoring&#xff09;系统&#xff0c;它提供了链路跟踪功能。 SkyWalking 的…

ceph----应用

文章目录 一、创建 CephFS 文件系统 MDS 接口1.1 服务端操作1.2 客户端操作 二、创建 Ceph 块存储系统 RBD 接口三、OSD 故障模拟与恢复 一、创建 CephFS 文件系统 MDS 接口 1.1 服务端操作 1&#xff09;在管理节点创建 mds 服务 cd /etc/ceph ceph-deploy mds create node0…

Java编程-基本排序算法

冒泡排序 图解 &#xff08;注&#xff1a;图片来源网络&#xff09; Java代码 package suanfa_Ja;import org.apache.hadoop.security.SaslOutputStream;// 基本排序算法&#xff0c;冒泡排序 时间复杂度 O(n^2) 空间复杂度O(1) public class BubbleSort {public static v…

blender 建模马拉松

效果展示 蘑菇模型创建&#xff1a; 创建蘑菇头 shift A &#xff0c;创建立方体&#xff1b; 右下工具栏添加细分修改器&#xff08;视图层级&#xff1a;2&#xff0c;渲染&#xff1a;2&#xff09;&#xff1b;tab键进入编辑模式&#xff0c;alt z 进入透显模式&…