地址:
北京市朝阳区广顺北大街33号院1号楼1单元6685号
工作时间
周一至周五: 9AM - 7PM
周末: 10AM - 5PM
地址:
北京市朝阳区广顺北大街33号院1号楼1单元6685号
工作时间
周一至周五: 9AM - 7PM
周末: 10AM - 5PM

在高频交易(HFT)的世界里,时间不仅是金钱,更是生死线。
几十纳秒的差距,就可能决定一单交易的成败。
本文从 硬件 → 操作系统 → 编译器 → C++ 代码 → 测量验证 五个层次,系统讲解如何把延迟压缩到纳秒级,并通过完整代码示例展示实战方法。
在 HFT 里,不只是要“更快”,而是要“稳定地快”。
-O3 -flto -march=native;热点函数 always_inline;冷路径 noinline。绑核 + NUMA 本地化
#include<pthread.h>#include<sched.h>#include<numaif.h>void pin_to_cpu_and_numa(int cpu, int node) {cpu_set_t set; CPU_ZERO(&set); CPU_SET(cpu, &set);pthread_setaffinity_np(pthread_self(), sizeof(set), &set);unsignedlong mask = 1UL << node;set_mempolicy(MPOL_BIND, &mask, 8*sizeof(mask));}
对象池(替代 new/delete 抖动)
template<classT, size_t N>
classObjectPool {
public:
ObjectPool(){ for(size_t i=0;i<N;++i) free_.push(&buf_[i]); }
inline T* acquire(){ auto* p=free_.top(); free_.pop(); returnnew(p) T(); }
inline void release(T* p){ p->~T(); free_.push(p); }
private:
alignas(T) unsignedchar raw_[N*sizeof(T)];
T* buf_ = reinterpret_cast<T*>(raw_);
std::stack<T*> free_;
};
SPSC 无锁环形队列
template<typename T, size_t N>
struct SPSC {
std::atomic<size_t> r{0}, w{0};
T buf[N];
bool push(const T& x){
auto n = (w.load(std::memory_order_relaxed)+1)%N;if(n==r.load(std::memory_order_acquire)) return false;
buf[w] = x; w.store(n,std::memory_order_release); return true;
}
bool pop(T& o){
auto rr=r.load(std::memory_order_relaxed);
if(rr==w.load(std::memory_order_acquire)) return false;
o = buf[rr]; r.store((rr+1)%N,std::memory_order_release); return true;}
};
TSC 纳秒级计时
#include<x86intrin.h>static inline uint64_t ns_now_tsc(uint64_t cycles_per_ns){unsigned aux; return __rdtscp(&aux) / cycles_per_ns;
}
| 优化环节 | 优化前 | 优化后 | 收益 |
|---|---|---|---|
| 系统整体 | 5–15 µs | 2–5 µs | p99 稳定性显著提升 |
| 虚函数调用 | ~25 ns | ≈0 ns | 删除 vtable 跳转 |
| new/delete | 200–1000 ns | ~10–20 ns 稳定 | 避免堆锁与碎片化 |
| 哈希查找 | ~24 ns | 7–9 ns | 连续内存,cache 友好 |
pow(x,1.5) |
100+ ns | 20–30 ns | 替换为 x*sqrt(x) |
| 计时开销 | 80–200 ns | ~10 ns | 用户态 TSC |
HFT 延迟优化不是写几行快代码,而是硬件—系统—编译—程序—测量的系统工程。
只有把不确定性移出运行时,把热路径压到纳秒级,才能在市场中长期领先。
👉 你认为还有哪些地方可以再抠出几个纳秒?留言聊聊~
📌 参考资料:
1. Carl Cook,《When a Microsecond Is an Eternity》,CppCon 2017 技术演讲。

