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

Hagon
发布于 2022-9-28 15:14
浏览
2收藏

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

【简单回顾】

【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

3.总结

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

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
4
收藏 2
回复
举报
5条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

技术不断的迭代,肯定会有更快的库出现,说不定就在楼主手中。

回复
2022-9-28 18:37:33
喝一大口可乐
喝一大口可乐

C语言作为50多年前的语言,现在依旧有着旺盛的生命力,真是厉害

1
回复
2022-9-30 10:16:45
物联风景
物联风景

在c语言嵌入式里面,除了要考虑速度,还要考虑对内存的占用

回复
2022-9-30 11:19:08
诺舒华吃西瓜
诺舒华吃西瓜 回复了 喝一大口可乐
C语言作为50多年前的语言,现在依旧有着旺盛的生命力,真是厉害

C语言还是强的

回复
2022-9-30 13:06:45
Hagon
Hagon 回复了 物联风景
在c语言嵌入式里面,除了要考虑速度,还要考虑对内存的占用

对,这篇文章只是从速度性能考虑,具体应用还要看具体场景

回复
2022-9-30 13:27:58
回复
    相关推荐