互動問答 · 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。每一個能得到來源充足且有用答案的問題,都會在下一個版本加入索引集合。