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