互动问答 · 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 用于字段查找。字段访问变为单条以 FIX 标签号为索引的 mov 指令。

3. std::pmr::monotonic_buffer_resource 为确实需要分配的内容提供 arena 分配。Arena 预先分配大小,按会话复用。

结果是热路径上 0 次 malloc 调用,通过自定义分配器验证,该分配器对每次 alloc/free 进行埋点,任一发生即测试失败。

查看埋点
Arena 大小与溢出
冷路径分配
12:04:32 · 312 ms · 来源 parser/arena.hpp
发送 · ⇧ ↵ 换行基于 main@a4f29d1 · v1.8

常见问题, 已索引。

几乎每次对话都会涉及的八个问题。点击任一展开,或者拉回到上方实时线程。

Q · 001动机你为什么要构建 NexusFIX?为什么不直接用 QuickFIX?+

QuickFIX 设计于 2000 年代初期,围绕 C++98/03 习语:虚函数派发、每消息堆分配、基于字符串的字段存储。这些模式与亚微秒延迟根本不兼容。

我们使用 QuickFIX 设计时还不存在的 C++23 能力,从第一性原理重新开始。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 提供 arena 分配。

结果是热路径上零 malloc 调用,通过在每次 CI 构建上运行的自定义分配器埋点框架验证。

在实时线程中提问 →
Q · 004C++23NexusFIX 使用了哪些 C++23 特性?+

std::expected 用于错误处理(热路径无异常)、std::span 用于零拷贝数据视图、概念用于编译期接口验证、consteval 用于编译期计算,以及 [[likely]]/[[unlikely]] 分支提示。

在 QuickFIX 的时代,这些每一个都需要自定义手写实现。

在实时线程中提问 →
Q · 005SIMDSIMD 解析是如何工作的?+

AVX2 指令一次加载 32 字节,并使用向量化比较并行查找 SOH (\x01) 分隔符。这比逐字节扫描快约 13 倍。

该技术受 simdjson 启发但针对 FIX 协议语义进行了调整。即 tag=value=SOH 结构意味着我们可以在单次向量化遍历中定位每个字段边界,然后构建偏移量表。

在实时线程中提问 →
Q · 006FIX支持哪些 FIX 版本?+

FIX 4.4 完全支持,是生产环境中最常用的版本。FIX 5.0 + FIXT 1.1 也完全支持,与 4.4 相比仅有 2% 的额外开销。

结构索引与版本无关。字段扫描在所有 FIX 版本中工作方式相同。自定义方言覆盖在会话绑定时处理特定场所的标签。

在实时线程中提问 →
Q · 007生产环境NexusFIX 是否已可用于生产?+

NexusFIX 正在积极开发中,尚未部署到生产交易环境。基准测试来自受控环境,使用 CPU 固定和缓存预热。

生产加固。浸泡测试、故障模式覆盖、针对特定场所网关的认证。是一个独立的工程工作。如果你正在考虑用于生产,请先与我们联系。

在实时线程中提问 →
Q · 008对比NexusFIX 与 Fix8 相比如何?+

Fix8(C++11)使用对象池和零拷贝技术,是更成熟的开源 FIX 引擎之一。

NexusFIX 的不同之处在于利用 C++23 标准库特性(PMR、std::span、std::expected)而非自定义实现。需要审计的活动部件更少。并增加了 Fix8 没有的 SIMD 加速解析。

在实时线程中提问 →

如果你的问题 不在索引中?

在上方实时线程中提问,或在 GitHub 上提 issue。每一个能得到来源充足且有用答案的问题,都会在下一个版本中加入索引集合。