silentjson v2.0.0: Уперлись в железо, или как мы выжали максимум из парсинга JSON в Go

от автора

Привет, сообщество! Мы рады объявить о выходе крупного обновления нашего JSON-парсера без кодогенерации и аллокаций — silentjson v2.0.0.

В первую очередь, огромное спасибо всем, кто поддержал проект и давал обратную связь. Без вашего участия мы бы не зашли так далеко.

Что нового в v2.0.0?

В этом релизе мы сосредоточились на предельной эффективности и специфических юзкейсах:

  • Оптимизация парсинга без AVX2. Мы серьезно прокачали скалярный fallback. Теперь даже на архитектурах без поддержки современных векторных инструкций или там, где они отключены, парсер показывает отличные результаты.

  • hft-ipc. Кто знает, тот поймет.

Вишенка на торте: мы уперлись в физику

Главная новость релиза — скорость умчалась так, что мы банально перестали догонять. Мы практически полностью исключили программные накладные расходы и теперь просто упираемся в сырое железо и пропускную способность памяти.

Это круто, да. Но нужно быть честными: экстремально большая нагрузка дает влияние и на нас. Справедливости ради стоит сказать, что в симуляции тяжелого сценария под стресс-нагрузкой скорость парсинга упала на 60%. Но даже с учетом этой просадки silentjson продолжает обгонять всех конкурентов на непреодолимую величину. Запас прочности оказался колоссальным.

Вот небольшая затравка с тестами на AMD Ryzen 9 7950X3D (парсинг 100 000 объектов):

Режим

Пропускная способность

Standard (encoding/json)

110 МБ/с

Sonic (JIT)

644 МБ/с

SilentJSON (Scalar)

810 МБ/с

SilentJSON (AVX2)

24 670 МБ/с

(Подробности позже или на GitHub)

Не верьте нам на слово

Не забываем про наш вклад и идем проверять, не обманули ли мы вас. А то вдруг.

Обновляйтесь до актуальной версии:

go get github.com/GenshIv/silentjson@v2.0.0

Пишите свои бенчмарки в комментарии к этой статье. Кто больше!

Репозиторий проекта: github.com/GenshIv/silentjson

ссылка на оригинал статьи https://habr.com/ru/articles/1055022/