

silentjson v2.0.0: Уперлись в железо, или как мы выжали максимум из парсинга JSON в Go
Привет, сообщество! Мы рады объявить о выходе крупного обновления нашего JSON-парсера без кодогенерации и аллокаций -- silentjson 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 )
Не забываем про наш вклад и идем проверять, не обманули ли мы вас. А то вдруг.
Обновляйтесь до актуальной версии:
Пишите свои бенчмарки в комментарии к этой статье. Кто больше!
Репозиторий проекта: github.com/GenshIv/silentjson
Читать на habr.com