Sıkı kuyruk. p99'da sürpriz yok.
Kilitsiz SPSC kuyrukları, dallanmasız etiket çözücüleri, sıcak yol inline'lama. En yavaş mesaj en hızlısına benziyor. Borsaların sizi gerçekten değerlendirdiği ölçüt budur.
Kaçırılan bir heartbeat'i affetmeyen borsalar için tasarlanmış bir C++23 FIX protokol motoru. Sıcak yolda sıfır bellek ayırma, mikrosaniyenin altında parse, deterministik oturum durumu.
Öngörülebilir. En ince ayrıntısına dek.
Bir prodüksiyon runbook'unda arayacağınız her sayı. Yük altında, standart donanımda, deterministik bir tekrar oynatımına karşı ölçüldü.
Birbiri üzerine eklenen üç mimari tercih. Her biri bir sonrakini mümkün kılıyor.
Kilitsiz SPSC kuyrukları, dallanmasız etiket çözücüleri, sıcak yol inline'lama. En yavaş mesaj en hızlısına benziyor. Borsaların sizi gerçekten değerlendirdiği ölçüt budur.
Statik arena, intrüziv freelist'ler, sabit boyutlu mesaj yuvaları. Emirler akarken ayırıcı asla çalışmaz. Bu yüzden çekirdek sayfayı geri almak için sizi asla araya almaz.
Her sürüm için üretilmiş sözlükler, oturum başına çalışma zamanında seçilebilir. Borsaya özgü alanlar için özel lehçe katmanları. Borsanın çalıştırdığı tel formatı, sizin gönderdiğiniz formattır.
Başlıca hisse senedi, vadeli işlem, FX ve kripto borsaları için önceden hazırlanmış oturum profilleri. Gerçek üretim izlerinden yakalanan heartbeat, sequence-reset semantiği ve resend-request tuhaflıkları.
Bir NewOrderSingle'ın decode ve yönlendirmesi, yan yana. Aynı mesaj, aynı makine, çok farklı maliyet.
void Application::onMessage(const FIX44::NewOrderSingle& msg, const SessionID& sid) { FIX::ClOrdID clOrdId; msg.get(clOrdId); // allocates FIX::Symbol symbol; msg.get(symbol); // allocates FIX::Side side; msg.get(side); FIX::OrderQty qty; msg.get(qty); // allocates Decimal FIX::Price price; msg.get(price); // allocates Decimal std::string key = symbol.getString(); // allocates std::string router_->route(key, clOrdId.getString(), qty, price); } // ~14 heap allocs / msg
void OrderHandler::on_message(MessageView m, SessionRef sid) noexcept { auto [cl_ord_id, symbol, side, qty, price] = m.decode<D::ClOrdID, D::Symbol, D::Side, D::OrderQty, D::Price>(); // in-place, span<const char> // fixed-arena order slot, no heap, no copies auto& slot = arena_.acquire(cl_ord_id); slot.init(symbol, side, qty, price, sid); router_.route(slot); // 0 heap allocs / msg }
QuickFIX iki on yıl boyunca sektörün ağır yükünü taşıdı. O eski tercihler darboğaza dönüştüğünde NexusFIX'e başvurulur.
| QuickFIX | NexusFIX | |
|---|---|---|
| Sıcak yol ayırmaları | Mesaj başına ~14 heap ayırma (std::string, Decimal) | 0 · statik arenalar, yerinde decode |
| p99 parse gecikmesi | Lehçeye göre 1,2–1,8 µs | < 500 ns · dalsız etiket decode'u |
| Çekirdek başına debi | 60–90K msg/s sürdürülebilir | 240K+ msg/s sürdürülebilir |
| Yük altında kuyruk davranışı | GC yok, ama allocator çalkantısı = öngörülemez sıçramalar | Sıcak yolda allocator yok. düz kuyruk |
| Protokol sürümleri | 4.2 / 4.4 / 5.0. Yapı başına XML veri sözlüğü | 4.2 / 4.4 / 5.0 / FIXT + çalışma zamanı lehçe katmanı |
| Dil | C++03 / C++11 deyimleri, sanal dispatch | C++23, concepts + ranges, sıcak yolda virtual yok |
Tel üzerinden bayt girer. Yönlendirilmiş emir çıkar. Üç aşama, hepsi aynı iş parçacığında, hepsi bellek ayırmadan.
SOH ile ayrılmış akış yerinde dolaşılır. Her etiket, orijinal tampon üzerinde tipli bir görünüme çözülür; sayısal alanlar dalsız olarak parse edilir, lehçe katmanı oturum bağlama anında uygulanır.
Sıra numaraları, heartbeat pencereleri, gap-fill semantiği, resend-request tuhaflıkları. Her venue profili için üretilen bir durum makinesi tarafından işlenir. Her geçiş memory-mapped bir günlüğe yazılır.
Sabit bir arenadaki bir emir slotu alınır, referansla doldurulur ve lock-free SPSC kuyruğu üzerinden uygulamanıza teslim edilir. Slot, emir terminal durumuna ulaşana kadar yaşar, ardından arenaya geri döner.
Sırada çekilecek iki iplik daha. Mimari yazısı veya canlı sohbet edilebilir açıklayıcı.
NexusFIX statik arenaları, lock-free SPSC kuyrukları ve üretilmiş durum makineleriyle en yavaş mesajı en hızlı görünmesi için nasıl kullanır. Sayılarla.
Derinlemesine yazıyı oku →Motorun belgelerine, mesaj sözlüklerine, venue profillerine ve benchmark süitine erişen sohbet arayüzü. Üretim kod tabanı üzerinde eğitildi, gerçek başlıklara dayanır.
Chatbot'u aç →NexusFIX, tek bir statik kütüphane ve CLI oturum simülatörü olarak gönderilir. Bir venue yapılandırması ve bir handler getirin, yerelde çalışan deterministik bir FIX oturumunuz olsun. Bir günlükten yeniden oynatılabilir, bayta kadar izlenebilir.
NexusFIX, inşa ettiğimiz üç motordan biri. Aynı felsefe: mümkün olduğunda open-source, performans önce, lock-in yok.
Ölçekte AI üretimi + C++23 backtest hızı + kurumsal düzeyde istatistiksel kompozisyon. 1000+ sinyal quant ticareti erişilebilir kılan 3 katmanlı rekabet hendeği.
Daha fazla bilgi →138+ gösterge ve üretime hazır stratejilerle C++23 backtesting motoru. StratCraft'ın altındaki replay katmanı, kendi araştırma yığınınız için bağımsız olarak da kullanılabilir.
Daha fazla bilgi →