跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 写一个最快的 JSON Library
未分類
19 10 月 2020

写一个最快的 JSON Library

写一个最快的 JSON Library

資深大佬 : ibireme 4

之前也写过一些 JSON 解析,但感觉这类东西到处都有也没太大价值。 去年出现了 simdjson,使用 AVX2 和 NEON 来解析 JSON,号称是第一个达到 GB/s 的 JSON 解析库。 于是我就好奇在不使用 SIMD 的情况下 JSON 解析性能究竟能达到什么程度。

这个是我空闲时写的库,C89 、跨平台,对 JSON 可读可写,符合 RFC 标准: https://github.com/ibireme/yyjson

至于性能,在新一些的 x64 上通常比 simdjson 快一点,在旧 x64 和 arm64 上比 simdjson 快很多, 可以吹一下这是目前为止最快的 JSON Library 了,大家可以先猜猜看为什么这么快~

大佬有話說 (66)

  • 資深大佬 : gugogo

    身体咋样啦

  • 資深大佬 : jzyff

    比 RapidJSON 快吗

  • 資深大佬 : felixin

    给大佬递茶

  • 資深大佬 : fengjianxinghun

    大佬牛逼!

  • 資深大佬 : ytll21

    给大神点个赞

  • 資深大佬 : eudore

    大佬 6666666

  • 資深大佬 : fengjianxinghun

    编译器 128bit 支持?
    编译器内建 clzll/BitScanReverse 这种?

  • 主 資深大佬 : ibireme

    @jzyff 读写都快 3-5 倍

  • 主 資深大佬 : ibireme

    @fengjianxinghun 编译器不支持就没用啊,而且只在处理长浮点数时能快一点,普通 JSON 根本用不到。

  • 資深大佬 : fwee

    为什么比 SIMD 还要快?

  • 資深大佬 : littlewing

    可以分享一下为什么这么快吗?

  • 主 資深大佬 : ibireme

    @fwee @littlewing
    总之就是想办法充分利用 CPU 的指令级并行,优化分支预测、优化未对齐内存访问等等,
    然后想办法让编译器生成更优的指令,以后有空可能会写点文章分享下。

  • 資深大佬 : myqoo

    要是能熟读 strlen, memcpy 等常用函数的内部实现细节,就可以充分利用硬件特性做优化。当年第一次看时被各种奇技淫巧震惊到。

  • 資深大佬 : beidounanxizi

    不相信,发一篇吹牛 PPT 看看呗

  • 資深大佬 : ryan0wang

    大佬牛逼

  • 資深大佬 : yazinnnn

    大佬牛逼!

  • 資深大佬 : neighbads

    蹲一个文章分享。。大佬 NB

  • 資深大佬 : nonduality

    大神能顺手 port 一个到 python 么?

    ultrajason 在 Alpine Linux 下编译安装不方便,一直想找个高速的 json 库代替 python 内置的。

  • 資深大佬 : FH0

    star 了,c 语言难以企及的高度。想知道主做什么工作。

  • 資深大佬 : raaaaaar

    强

  • 資深大佬 : beyondex

    大佬,牛逼了

  • 資深大佬 : shuax

    给大佬递茶

  • 資深大佬 : yuanbo6

    大佬牛逼

  • 資深大佬 : youla

    请问我的.net core 有机会用上吗?

  • 資深大佬 : youla

    等一个 yyjsonSharp

  • 資深大佬 : knightdf

    @nonduality ujson

  • 資深大佬 : zhangdasen

    变态

  • 資深大佬 : youxiachai

    忽然发现..这是 YY 系列组件大神…看来是病好了?

  • 資深大佬 : ydatong

    膜拜 yykit 大佬

  • 資深大佬 : perfy576

    @myqoo 有这方面的文章吗

  • 資深大佬 : BoarBoar

    身为同行感觉我们玩的不是一个游戏

  • 主 資深大佬 : ibireme

    @youxiachai 病没好,不如说更瘦了。。
    @nonduality @youla 库本身还有待完善呢,port 到其他语言先缓缓吧~

  • 資深大佬 : TangMonk

    @ibireme 大神是什么病,能帮上忙吗?

  • 資深大佬 : justin2018

    YY 大佬~

  • 資深大佬 : Jasio

    给大佬递茶

  • 資深大佬 : inframe

    给大佬递茶

  • 資深大佬 : refine

    给大佬倒波波茶

  • 資深大佬 : Raven316

    给大佬递茶

  • 資深大佬 : whypool

    给大佬递茶

  • 資深大佬 : loveuqian

    这是 YY 吧?膜拜一下

  • 資深大佬 : wzzzx

    弱弱问一句,为什么使用 C89,不使用 C99 ?

  • 資深大佬 : creanme

    给大佬递茶

  • 資深大佬 : IvanLi127

    给大佬递枸杞茶

  • 資深大佬 : lisonfan

    给大佬端一杯卡布奇诺

    还做 iOS 吗? YYKit 还继续维护吗?

  • 資深大佬 : mathzhaoliang

    大佬能在文章里讲讲代码结构么,我感觉单独看一行还能看懂,连起来就不知道在写什么了。

  • 資深大佬 : polymerdg

    C 大佬

  • 資深大佬 : yangshebing

    很好,很强大

  • 資深大佬 : arnoldxiao

    又见大佬出山

  • 資深大佬 : nicebird

    很猛的样子,

  • 資深大佬 : BreadBig

    敬仰 大佬

  • 資深大佬 : zjddp

    YYKit 大佬!

  • 資深大佬 : arthasliu

    给大佬递茶

  • 主 資深大佬 : ibireme

    @mathzhaoliang 从外面的 json_read 和 json_write 入口看进来就挺清晰了,代码里面是按功能分开的,数据结构可以看这里: https://github.com/ibireme/yyjson/blob/master/doc/DataStructure.md

  • 主 資深大佬 : ibireme

    @wzzzx 其实用到 C99 的 stdint 和 stdbool,但加一点兼容逻辑就能适配 C89 了。有些编译器比如旧一点的 msvc 是不支持完整 C99 的。

  • 資深大佬 : codyfeng

    牛啊,膜拜一下

  • 資深大佬 : mathzhaoliang

    @ibireme 那个 md 文档我能看懂,多谢。顺便问下为什么你的项目名字都带个 yy ?

  • 資深大佬 : KeyboardManAnAn

    既然是使用的 C 语言编写的,那理论上岂不是几乎可以嵌入到任意语言和平台?

    yyjson-Objective-C for iOS
    yyjson-Swift for iOS
    yyjson-Java for Android
    yyjson-Kotlin for Android
    yyjson-C# for Xamarin
    yyjson-dart for flutter

    也是时候排上日程表了 (滑鸡

  • 資深大佬 : KeyboardManAnAn

    @mathzhaoliang 早期 iOS 开发语言是 Objective-C ,因为没有命名空间,为了防止命名冲突,都会在自定义的类前面加上自己的名字(或者是项目的名字,或者是公司的名字)的缩写前缀, 以作区别. 现在大佬的项目还是加上 yy 前缀(大佬个人名字的汉语拼音缩写), 可能是历史遗留问题, 可能是强迫症使然, 不过更多可能的是品牌策略(

  • 資深大佬 : KeyboardManAnAn

    @TangMonk 大佬的博客中有相关自述, 参见 https://blog.ibireme.com/2017/09/01/diary/#more-42043

  • 資深大佬 : thisisgpy

    大老牛逼,但是违反广告法了。

  • 資深大佬 : andyhuzhill

    @ibireme #54 话说 msvc 跳过 c99 开始支持 c11 和 c17 了

  • 資深大佬 : nonduality

    @KeyboardManAnAn yyjson 是 ANSI C 写的,可移植性强,能适应全平台、多语言,期待 yyjson 站到相当于 sqlite 的地位。前些天大牛 Agentzh 也说写了一个极其高效的 json 库,可惜目前不开源。

    另,继续期待尽早支持 python,因为 rapidjson 是 rust 写的(编译不方便),ultrajson 不支持 musl 库(在 Alpine Linux 用起来别扭) @ibireme

  • 資深大佬 : onevcat

    给大佬递茶

  • 資深大佬 : exceldream

    为什么不叫 rocket json

  • 資深大佬 : Guaidaodl

    给大佬跪下了.

  • 資深大佬 : KeyboardManAnAn

    @onevcat 大佬给大佬递茶

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具