啃論文俱樂部---一個C語言JSON解析庫的基準評估
1、各種C語言JSON庫的Benchmark比較
這是6年前的一個C語言JSON解析庫的基準評估,我可以從這里面直觀得看到數十種C語言解析器得性能
橫向對比。
https://github.com/miloyip/nativejson-benchmark該基準測試(benchmark)評估了41個具有JSON解析/生成功能的開源C/C++庫的性能。性能評估標準包括速度、內存和代碼大小 。
Parsing Time(解析時間)
Parsing Memory(解析占用內存)
Stringify Time(序列化時間)
Prettify Time(修飾時間)
Code Size(代碼大小)
Winner—RapidJSON
可以看到這份數據雖然是6年前的,但是依然把當時大多數JSON開源庫進行了比較,其中從性能來看
RapidJSON 表現得非常優秀。
2、每秒解析千兆字節的JSON解析庫—simdJSON
下圖表示使用GNU GCC 10編譯器在英特爾Skylake處理器(3.4 GHz)上解析各種文件的解析速度(以
GB/s為單位)。
下圖可以看出simdjson不管解析小文件(300bytes)還是大文件(3MB),解析速度都能穩定在
2.5GB/s,保持穩定的千兆字節文件解析速度。
3、最快的C語言JSON解析庫—YYJSON
YYJSON是一個基于C語言開發的JSON解析庫,它利用了現代CPU的一些特點,從而將性能提高,并且在github上它也自稱最快的C語言JSON庫。
然而我們在simdJSON那也看到了,如果?大多數JSON字段在編譯時都是已知?的,simdjson新的會更快。但是如果是?JSON字段在編譯時未知的情況?,又會鹿死誰手呢?下圖是用于測試的10個不同的大小和內容的JSON數據集。
性能展示
下面是關于 yyjson 用這個10個數據集在兩個不同環境下與simdjson以及rapidjson的性能比較。
可以直觀地看到 YYJSON 不管是解析速度還是序列化速度,都占有很大的優勢。
?https://github.com/ibireme/yyjson。
3、總結
雖然數年以前 rapidJSON 一度作為最優秀的C/C++的JSON庫,但是近年來涌現的simdJSON以及YYJSON顯然有了質的突破。所以在大多數JSON字段在編譯時都是已知的情況下,最佳的JSON庫就是simdJSON,否則YYJSON會是最佳選擇。