← NexusFIX/Вопросы и ответы
Интерактивные вопросы · v1.8 · основано на исходниках

Спросите
сам движок.

Разговорный интерфейс к архитектуре NexusFIX, словарям сообщений, профилям площадок и набору бенчмарков. 182 экспертных ответа проиндексированы и привязаны к живой кодовой базе. А также живой тред, когда шаблонного ответа недостаточно.

182
Экспертных ответов
8
Категорий
v1.8
Индексированная сборка
< 2с
Медианный ответ
Эксперт NexusFIX v1.8
Проиндексировано на main@a4f29d1 · 12 мин назад
NF

Привет, я эксперт NexusFIX, основан на публичном исходном коде, CSV бенчмарков и 182 отобранных ответах, проиндексированных на этой странице.

Выберите тред справа или задайте любой вопрос ниже. Если ответа нет в исходниках, я об этом скажу.

Почему не QuickFIX?
Горячий путь без аллокаций
SIMD-парсинг объяснён
Какие функции C++23?
Готовность к продакшену
12:04:18 · проиндексировано
YOU

Как NexusFIX достигает нулевых аллокаций в куче?

12:04:31
NF

Три замены, все на горячем пути:

1. Представления std::span<const char> в исходный буфер заменяют копии std::string. Span занимает 16 байт в стеке. Без кучи, без копирования, без деструктора.

2. Предварительно индексированный массив заменяет std::map для поиска полей. Доступ к полю становится единственным mov, индексированным по номеру FIX-тега.

3. std::pmr::monotonic_buffer_resource предоставляет арена-аллокацию для всего, что действительно требует слота. Арена предварительно выделена и переиспользуется на сессию.

Результат: 0 вызовов malloc на горячем пути, проверено пользовательским аллокатором, который инструментирует каждый alloc/free и проваливает тест при срабатывании любого.

Показать инструментацию
Размер и переполнение арены
Аллокации холодного пути
12:04:32 · 312 мс · источник parser/arena.hpp
отправить · ⇧ ↵ новая строкаОсновано на main@a4f29d1 · v1.8

Частые вопросы, проиндексированы.

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

Q · 001МотивацияПочему вы создали NexusFIX? Почему не просто использовать QuickFIX?+

QuickFIX был разработан в начале 2000-х вокруг идиом C++98/03: виртуальная диспетчеризация, аллокация в куче на каждое сообщение, хранение полей на основе строк. Эти паттерны принципиально несовместимы с задержкой ниже микросекунды.

Мы начали с первых принципов, используя возможности C++23, которых не существовало при проектировании QuickFIX. Std::span, std::expected, std::pmr, концепты и consteval. И спросили: как выглядел бы FIX-движок, если бы не тащить за собой двадцать лет решений по аллокаторам?

Спросить в живом треде →
Q · 002АудиторияКто целевая аудитория NexusFIX?+

Квант-трейдинговые фирмы и команды инфраструктуры, которым нужна детерминированная обработка FIX-сообщений ниже микросекунды.

Конкретно: фирмы, запускающие коллокированные стратегии, команды, создающие собственные торговые шлюзы, и C++-инженеры, изучающие современные техники производительности на реальном публичном кодовом базе.

Спросить в живом треде →
Q · 003ПроизводительностьКак NexusFIX достигает нулевых аллокаций в куче?+

Представления std::span в исходный буфер заменяют копии std::string. Предварительно индексированные массивы заменяют std::map. std::pmr::monotonic_buffer_resource предоставляет арена-аллокацию.

Результат: ноль вызовов malloc на горячем пути, проверено через каркас инструментации пользовательского аллокатора, который запускается на каждой сборке CI.

Спросить в живом треде →
Q · 004C++23Какие функции C++23 использует NexusFIX?+

std::expected для обработки ошибок (без исключений на горячем пути), std::span для представлений данных без копирования, концепты для проверки интерфейсов во время компиляции, consteval для вычислений во время компиляции и хинты ветвлений [[likely]]/[[unlikely]].

Каждая из них потребовала бы собственной ручной реализации в эпоху QuickFIX.

Спросить в живом треде →
Q · 005SIMDКак работает SIMD-парсинг?+

Инструкции AVX2 загружают 32 байта за раз и используют векторизованное сравнение для параллельного поиска разделителей SOH (\x01). Это примерно в 13 раз быстрее побайтового сканирования.

Техника вдохновлена simdjson, но адаптирована под семантику протокола FIX. То есть структура tag=value=SOH означает, что мы можем определить границы каждого поля за один векторизованный проход и затем построить таблицу смещений.

Спросить в живом треде →
Q · 006FIXКакие версии FIX поддерживаются?+

FIX 4.4 поддерживается полностью и является наиболее распространённой в продакшене. FIX 5.0 + FIXT 1.1 также поддерживается полностью, с накладными расходами всего 2% по сравнению с 4.4.

Структурный индекс не зависит от версии. Сканирование полей работает одинаково между версиями FIX. Пользовательские диалектные оверлеи обрабатывают специфичные для площадки теги при привязке сессии.

Спросить в живом треде →
Q · 007ПродакшнГотов ли NexusFIX к продакшену?+

NexusFIX находится в активной разработке и пока не развёрнут в продакшен-средах торговли. Бенчмарки взяты из контролируемых сред с закреплением CPU и прогревом кеша.

Закалка продакшена. Стресс-тесты, покрытие режимов отказа, сертификация под конкретные шлюзы площадок. Это отдельная инженерная работа. Если вы рассматриваете его для продакшена, сначала свяжитесь с нами.

Спросить в живом треде →
Q · 008СравнениеКак NexusFIX сравнивается с Fix8?+

Fix8 (C++11) использует пулы объектов и техники нулевого копирования и является одним из более продвинутых открытых FIX-движков.

NexusFIX отличается тем, что использует функции стандартной библиотеки C++23 (PMR, std::span, std::expected) вместо пользовательских реализаций. Меньше подвижных частей для аудита. И добавляет SIMD-ускоренный парсинг, которого нет у Fix8.

Спросить в живом треде →

Вопрос, которого нет в индексе?

Задайте его в живом треде выше. Или откройте issue на GitHub. Каждый вопрос с обоснованным и полезным ответом войдёт в индексированный набор в следующем релизе.