6

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库

 1 year ago
source link: https://ost.51cto.com/posts/17561
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

大家好! 我是深圳技术大学FSR实验室的同学,在OpenHarmony成长计划啃论文俱乐部里,与华为、软通动力、润和软件、拓维信息、深开鸿等公司一起,学习和研究序列化相关技术

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库

【简单回顾】

【FFH】OpenHarmony啃论文成长计划—为什么JSON将逐渐取代XML?
【FFH】OpenHarmony啃论文成长计划—几种常见的JSON解析器比较
【FFH】OpenHarmony啃论文成长计划—JSON-RPC
【FFH】OpenHarmony啃论文成长计划—浅谈序列化规范
【FFH】OpenHarmony啃论文成长计划—Flatbuffers应用于MQTT协议
【FFH】OpenHarmony啃论文成长计划—序列化技术发展及应用综述
【FFH】OpenHarmony啃论文成长计划—Apache Avro与Twiste
【FFH】啃论文俱乐部—cJSON在传统C/S模型的应用
【FFH】啃论文俱乐部—JSON压缩算法解读

1.各种C语言JSON库的Benchmark比较

这是6年前的一个C语言JSON解析库的基准评估,我可以从这里面直观得看到数十种C语言解析器得性能
横向对比。
https://github.com/miloyip/nativejson-benchmark
该基准测试(benchmark)评估了41个具有JSON解析/生成功能的开源C/C++库的性能。性能评估标准包括速度、内存和代码大小

Parsing Time(解析时间)

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区

Parsing Memory(解析占用内存)

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区

Stringify Time(序列化时间)

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区

Prettify Time(修饰时间)

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区

Code Size(代码大小)

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区

Winner—RapidJSON

可以看到这份数据虽然是6年前的,但是依然把当时大多数JSON开源库进行了比较,其中从性能来看
RapidJSON 表现得非常优秀。

2.每秒解析千兆字节的JSON解析库—simdJSON

下图表示使用GNU GCC 10编译器在英特尔Skylake处理器(3.4 GHz)上解析各种文件的解析速度(以
GB/s为单位)。

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区

下图可以看出simdjson不管解析小文件(300bytes)还是大文件(3MB),解析速度都能稳定在
2.5GB/s,保持稳定的千兆字节文件解析速度。

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区

3.最快的C语言JSON解析库—YYJSON

YYJSON是一个基于C语言开发的JSON解析库,它利用了现代CPU的一些特点,从而将性能提高,并且在
github上它也自称最快的C语言JSON库

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区

然而我们在simdJSON那也看到了,如果大多数JSON字段在编译时都是已知的,simdjson新的会更快。
但是如果是JSON字段在编译时未知的情况,又会鹿死谁手呢?
下图是用于测试的10个不同的大小和内容的JSON数据集。

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区

下面是关于 yyjson 用这个10个数据集在两个不同环境下与simdjson以及rapidjson的性能比较.

#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区
#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区
#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区
#打卡不停更#【FFH】啃论文俱乐部---世界上最快的C语言JSON库-开源基础软件社区

可以直观地看到 YYJSON 不管是解析速度还是序列化速度,都占有很大的优势。
https://github.com/ibireme/yyjson

虽然数年以前 rapidJSON 一度作为最优秀的C/C++的JSON库,但是近年来涌现的simdJSON以及
YYJSON显然有了质的突破。
所以在大多数JSON字段在编译时都是已知的情况下,最佳的JSON库就是simdJSON,否则YYJSON会是最
佳选择。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK