面向 NexusFIX 架構、訊息字典、場所配置與基準測試套件的對話式介面。 182 個專家解答的問題 已索引並以即時程式碼庫為基礎。當固定答案不夠時,可進入即時討論串。
你好,我是 NexusFIX 專家,基於公開源碼、基準 CSV 與本頁索引的 182 個精選答案。
從右側選一個話題,或者在下方提問。如果答案不在源碼中,我會明確告知。
NexusFIX 如何實現零堆積分配?
熱路徑上有三處替換:
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 進行埋點,任一發生即測試失敗。
幾乎每次對話都會涉及的八個問題。點擊任一展開,或者拉回到上方即時討論串。
QuickFIX 設計於 2000 年代初期,圍繞 C++98/03 慣用法:虛擬函式派發、每訊息堆積分配、基於字串的欄位儲存。這些模式與次微秒延遲根本不相容。
我們使用 QuickFIX 設計時還不存在的 C++23 能力,從第一性原理重新開始。Std::span、std::expected、std::pmr、概念和 consteval。並提出問題:如果不背負二十年的配置器決策,FIX 引擎會是什麼樣子?
需要確定性、次微秒 FIX 訊息處理的量化交易公司和基礎設施團隊。
具體來說:執行託管策略的公司、建構自訂交易閘道的團隊,以及在真實公開程式碼庫上學習現代效能技術的 C++ 工程師。
std::span
結果是熱路徑上零 malloc 呼叫,透過在每次 CI 建構上執行的自訂配置器埋點框架驗證。
std::expected 用於錯誤處理(熱路徑無例外)、std::span 用於零拷貝資料視圖、概念用於編譯期介面驗證、consteval 用於編譯期計算,以及 [[likely]]/[[unlikely]] 分支提示。
在 QuickFIX 的時代,這些每一個都需要自訂手寫實作。
AVX2 指令一次載入 32 位元組,並使用向量化比較並行查找 SOH (\x01) 分隔符號。這比逐位元組掃描快約 13 倍。
該技術受 simdjson 啟發但針對 FIX 協議語義進行了調整。即 tag=value=SOH 結構意味著我們可以在單次向量化遍歷中定位每個欄位邊界,然後建構偏移量表。
FIX 4.4 完全支援,是生產環境中最常用的版本。FIX 5.0 + FIXT 1.1 也完全支援,與 4.4 相比僅有 2% 的額外開銷。
結構索引與版本無關。欄位掃描在所有 FIX 版本中運作方式相同。自訂方言覆寫在工作階段繫結時處理特定場所的標籤。
NexusFIX 正在積極開發中,尚未部署到生產交易環境。基準測試來自受控環境,使用 CPU 固定和快取預熱。
生產加固。浸泡測試、故障模式覆蓋、針對特定場所閘道的認證。是一個獨立的工程工作。如果你正在考慮用於生產,請先與我們聯絡。
Fix8(C++11)使用物件池和零拷貝技術,是更成熟的開源 FIX 引擎之一。
NexusFIX 的不同之處在於利用 C++23 標準函式庫特性(PMR、std::span、std::expected)而非自訂實作。需要稽核的活動部件更少。並新增了 Fix8 沒有的 SIMD 加速解析。