Гигабайт JSON в секунду
Виктор Стародуб, Mail.ru Group
JSON был медленный
цифры — для многопоточного режима
Быстрый JSON нужен
ujson vs. ffjson
Сериализация
распаковка
маршалер структуры
lexer
выбор поля
маршалер примитивного типа
упаковка
маршалер структуры
обход полей
маршалер примитивов
буфер
Обход полей структуры: упаковка.
"dummy" упаковка, тестируем только обход
считаем только данные, не метаданные
Выбор полей структуры: распаковка.
Генерация кода: инструменты
Упаковка: запись в буфер
Упаковка: запись в буфер
Упаковка: запись в буфер
append()
лишние копирования
Упаковка: запись в буфер
append()
[][]byte
+
+
Упаковка: запись в буфер
[][]byte
+
+
sync.Pool
Упаковка: запись в буфер
[][]byte
[]byte
+
+
Упаковка: запись в буфер
Упаковка: запись в буфер
Упаковка: запись в буфер
Lexer
Упаковка/распаковка строк
Вызовы функций
Если функция сериализует по 12 байт:
Вызовы функций
Unsafe:
ujson vs. easyjson
Результат
Спасибо!
easyjson: github.com/mailru/easyjson
бенчмарки: github.com/vstarodub/parse-microbenchmarks
презентация: goo.gl/rQ6Uxy
Виктор Стародуб, v.starodub@corp.mail.ru