Измеренные результаты, а не маркетинговые заявления. Все тесты выполняются в Linux с GCC 13.3, 100 000 итераций, с привязкой к ЦП.
Непосредственное сравнение основных операций FIX.
Как мы прошли путь от 730нс до 246нс за четыре этапа компаундирования.
Замените копии std::string представлениями std::span<const char> в исходном буфере. Std::span занимает 16 байт в стеке. Без кучи, без копирования, без деструктора.
Замените std::map<int, std::string> предварительно индексированным массивом. Доступ к полю становится одной командой перемещения, индексируемой номером тега FIX.
Векторизованное сканирование разделителя SOH AVX2 обрабатывает 32 байта за цикл. ~ в 13 раз быстрее, чем побайтовое сканирование.
Таблицы смещения полей consteval и 22 таблицы поиска во время компиляции исключают ~300 ветвей времени выполнения для преобразования перечислений/типов. std::string> копирует
Логика синтаксического анализа
Проектные решения, которые увеличивают производительность в 3 раза.
| Техника | QuickFIX | NexusFIX |
|---|---|---|
| Память | Выделение кучи на сообщение | Нулевая копия std::spanviews |
| Поиск поля | O(log n) std::map | O(1) прямой массив индексирование |
| Разбор | Побайтовое сканирование | AVX2 SIMD векторизованный |
| Смещения полей | Вычисление времени выполнения | consteval время компиляции |
| Преобразование перечисления | Переключатель времени выполнения (~300 ветвей) | 22 таблицы поиска во время компиляции |
| Обработка ошибок | Исключения | std::expected (без броска) |
Изучено 11 ведущих отраслевых библиотек. Что мы узнали, что мы построили, что мы измерили.
Поиск итератора O(n) неоптимален для плотных пакетов FIX
consteval смещения полей + прямая индексация O(1)
Swiss Tables с SIMD-зондированием и отпечатками H2
absl::flat_hash_map для хранилища сеансов
Очередь SPSC без блокировки с отложенным форматированием
Quill как серверная часть регистрации
Двоичное кодирование + фоновый поток для регистрации 7 нс
DeferredProcessor<T> со статической двоичной сериализацией
DEFER_TASKRUN исключает пробуждение задач ядра
io_uring + зарегистрированные буферы + multishot
Переносимая абстракция SIMD для наборов инструкций
Сохранены встроенные функции, настроенные вручную для шаблонов FIX
Share-nothing реактор для высокопараллельного ввода-вывода
Закрепление ядра + конвейерная обработка без блокировок
Усовершенствованное ограждение памяти и примитивы без блокировки
Встроенная очередь SPSC + проверка побитовой маски
Заполнение строк кэша исключает ложное совместное использование
Встроенная очередь SPSC с идентичными методами
Общие оболочки SIMD для математических операций
Прямые встроенные функции Intel для сканирования SOH
Монотонный буфер позволяет выделять арену для каждого сообщения
std::pmr::monotonic_buffer_resource
Три команды для самостоятельного создания и запуска тестов.
$ git clone https://github.com/StratCraftsAI/NexusFix.git $ cd NexusFix $ ./start.sh build # 2m18s · release $ ./start.sh bench running 100,000 iterations · cpu pinned · warm cache ExecutionReport parse 246 ns p99 258 ns NewOrderSingle parse 229 ns p99 241 ns field_access 11 ns throughput 4.17 M msg/s ✓ csv written to ./out/bench-2026-05-17.csv