C++中的低延迟应用开发入门

2025年3月28日 | 分类: 【技术】

https://mp.weixin.qq.com/s/9QXKRVDiNPHBs2XFzP_Dnw

前言

第一部分:介绍C++ concepts并探索重要的低延迟应用

第1章:C++中的低延迟应用开发入门

  • 理解对延迟敏感型应用的要求
    • 理解延迟敏感型与延迟关键型应用
    • 测量延迟
    • 区分延迟指标
    • 对延迟敏感型应用程序的要求
  • 理解为何C++是首选编程语言
    • 编译型语言
    • 更贴近硬件——低级语言
    • 资源的确定性使用
    • 速度与高性能
    • 语言结构和特性
    • 成熟且庞大的社区支持
    • 持续积极发展的语言
  • 介绍一些重要的低延迟应用
    • 低级低延迟应用
    • 高级低延迟应用
    • 物联网和机器对机器应用
  • 总结

第2章:用C++设计常见的低延迟应用

  • 理解实时视频流应用中的低延迟性能
    • 定义低延迟流中的重要概念
    • 理解视频流中的延迟来源
    • 测量低延迟视频流中的延迟
    • 理解高延迟的影响
    • 探索低延迟视频流技术
    • 探索低延迟流的解决方案和平台
  • 理解在游戏应用中低延迟的关键限制
    • 低延迟游戏应用中的概念
    • 提升游戏应用性能
  • 讨论物联网和零售分析系统的设计
    • 确保物联网设备的低延迟
  • 探索低延迟电子交易
    • 理解现代电子交易对低延迟的需求
    • 在电子交易中实现最低延迟
  • 总结

第3章:从低延迟应用的角度探索C++概念

  • 技术要求
  • 用C++进行低延迟应用开发的方法
    • 先保证代码正确性,再进行优化
    • 设计最优的数据结构和算法
  • 关注处理器
  • 理解缓存和内存访问成本
  • 理解C++特性的底层原理
  • 利用C++编译器
  • 测量和提升性能
  • 避免陷阱并利用C++特性最小化应用延迟
    • 选择存储方式
    • 选择数据类型
    • 使用类型转换操作
    • 优化数值运算
    • 优化布尔和位运算
    • 对象的初始化、销毁、复制和移动
    • 使用引用和指针
    • 优化跳转和分支
    • 高效调用函数
    • 使用位域
    • 使用运行时多态
    • 使用编译时多态
    • 使用额外的编译时处理
    • 处理异常
    • 访问缓存和内存
    • 动态分配内存
    • 多线程
  • 最大化C++编译器优化参数
    • 理解编译器如何优化
    • 理解编译器何时无法优化
    • 了解编译器优化标志
  • 总结

第4章:构建低延迟应用的C++基础模块

  • 技术要求
  • C++线程处理在多线程低延迟应用中的应用
    • 定义一些有用的宏和函数
    • 创建并启动新线程
    • 设置线程亲和性
    • 构建示例
  • 设计C++内存池以避免动态内存分配
    • 理解内存池的定义
    • 理解内存池的使用场景
    • 设计内存池存储
    • 初始化内存池
    • 处理新的分配请求
    • 处理内存释放
    • 结合示例使用内存池
  • 使用无锁队列传输数据
    • 线程和进程间通信
    • 设计无锁队列存储
    • 初始化无锁队列
    • 向队列添加元素
    • 从队列消费元素
    • 使用无锁队列
  • 构建低延迟日志框架
    • 设计时间相关的实用方法
    • 设计低延迟日志记录器
    • 定义一些日志记录器结构
    • 初始化日志记录器数据结构
    • 创建日志记录器并启动日志记录器线程
    • 将数据推送到日志记录器队列
    • 添加一个实用的通用日志函数
    • 学习如何结合示例使用日志记录器
  • 使用套接字进行C++网络编程
    • 构建基本的套接字API
    • 实现发送/接收TCP套接字
    • 构建TCP服务器组件
    • 构建TCP服务器和客户端示例
  • 总结

第二部分:用C++构建实时交易所

第5章:设计我们的交易生态系统

  • 理解电子交易生态系统的布局
  • 定义电子交易生态系统的拓扑结构
  • 介绍电子交易生态系统的组件
  • 设计交易所中的C++撮合引擎
    • 理解撮合引擎的目的
    • 理解交易所订单簿
    • 匹配参与者订单
    • 设计我们的撮合引擎
  • 理解交易所如何向参与者发布信息
    • 通过市场数据传达市场事件
    • 设计市场数据发布者
    • 通过订单网关接口通知市场参与者
    • 设计订单网关服务器
  • 构建市场参与者与交易所的接口
    • 理解市场数据消费者基础设施
    • 设计市场数据消费者
    • 理解订单网关客户端基础设施
    • 设计订单网关客户端基础设施
  • 设计低延迟C++交易算法框架
    • 构建订单簿
    • 构建特征引擎
    • 开发执行逻辑
    • 理解风险管理系统
    • 设计我们的交易策略框架
  • 总结

第6章:构建C++撮合引擎

  • 技术要求
  • 定义撮合引擎中的操作和交互
    • 定义一些类型和常量
    • 设计撮合引擎
    • 设计订单簿
  • 构建撮合引擎并交换外部数据
    • 构建撮合引擎
    • 从订单网关队列消费数据并向其发布数据
    • 向市场数据发布者队列发布数据
    • 构建交易所应用程序二进制文件
    • 运行交易所应用程序二进制文件
  • 构建订单簿并进行订单撮合
    • 构建内部数据结构
    • 处理新的被动订单
    • 处理订单取消请求
    • 撮合主动订单并更新订单簿
  • 总结

第7章:与市场参与者通信

  • 技术要求
  • 定义市场数据协议和订单数据协议
    • 设计市场数据协议
    • 设计订单数据协议
  • 构建订单网关服务器
    • 定义订单网关服务器中的数据成员
    • 初始化订单网关服务器
    • 处理传入的客户请求
    • 使用先进先出(FIFO)排序器公平处理请求
    • 发送客户响应
  • 构建市场数据发布者
    • 定义市场数据发布者中的数据成员
    • 初始化市场数据发布者
    • 发布订单簿更新
    • 合成并发布快照
  • 构建主交易所应用程序
  • 总结

第三部分:构建实时C++算法交易系统

第8章:用C++处理市场数据并向交易所发送订单

  • 技术要求
  • 订阅市场数据并解码市场数据协议
    • 定义市场数据消费者中的数据成员
    • 初始化市场数据消费者
    • 运行市场数据消费者主循环
    • 处理市场数据更新并处理数据包丢失
    • 与快照流同步
  • 从市场数据构建订单簿
    • 定义市场订单簿的结构
    • 定义订单簿中的数据成员
    • 初始化订单簿
    • 处理市场更新并更新订单簿
    • 回顾订单簿管理的通用实用方法
  • 连接到交易所并发送和接收订单流
    • 定义订单网关客户端中的数据成员
    • 初始化订单网关客户端
    • 向交易所发送订单请求
    • 处理来自交易所的订单响应
  • 总结

第9章:构建C++交易算法的基础模块

  • 技术要求
  • 对交易执行做出反应并管理仓位、盈亏(PnL)和风险
  • 构建特征并计算复杂特征
    • 定义特征引擎中的数据成员
    • 初始化特征引擎
    • 根据订单簿变化计算特征
    • 根据交易事件计算特征
  • 利用成交情况更新仓位和盈亏
    • 声明PositionInfo中的数据成员
    • 在PositionInfo中处理订单执行
    • 在PositionInfo中处理订单簿变化
    • 设计PositionKeeper
    • 初始化PositionKeeper
    • 在PositionKeeper中处理订单执行和市场更新
  • 发送和管理订单
    • 定义OMOrder结构体及其相关类型
    • 设计OrderManager类
    • 定义OrderManager中的数据成员
    • 初始化OrderManager
    • 从OrderManager发送新订单
    • 从OrderManager取消订单
    • 添加简化订单管理的方法
    • 处理订单更新并更新订单
  • 计算并管理风险
    • 定义RiskCfg结构
    • 定义TradeEngineCfg结构
    • 声明RiskCheckResult枚举
    • 定义RiskInfo结构
    • 在RiskInfo中执行风险检查
    • 设计RiskManager中的数据成员
    • 初始化我们的RiskManager类
    • 在RiskManager中执行风险检查
  • 总结

第10章:构建C++做市和流动性获取算法

  • 技术要求
  • 理解我们交易算法的行为
    • 理解做市交易算法
    • 通过示例研究做市机制
    • 理解流动性获取交易算法
    • 添加枚举以定义算法类型
  • 管理订单簿中提供的被动流动性
    • 定义做市(MarketMaker)算法中的数据成员
    • 初始化做市算法
    • 处理订单簿更新和交易事件
    • 在做市算法中处理订单更新
  • 激进地开仓和平仓
    • 定义流动性获取(LiquidityTaker)算法中的数据成员
    • 初始化流动性获取交易算法
    • 处理交易事件和订单簿更新
    • 在流动性获取算法中处理订单更新
  • 构建交易引擎框架
    • 定义交易引擎中的数据成员
    • 初始化交易引擎
    • 发送客户请求
    • 处理市场数据更新和客户响应
    • 处理订单簿、交易和订单响应更新
    • 添加一些杂项方法
  • 构建并运行主交易应用程序
    • 构建主交易应用程序
    • 运行最终的交易生态系统
    • 检查运行输出
  • 总结

第四部分:分析和提升性能

第11章:添加检测工具并测量性能

  • 技术要求
  • 添加检测系统以测量系统性能
    • 使用RDTSC添加性能测量实用工具
    • 更新我们之前的时间实用工具
    • 理解实际测量系统中的一些问题
  • 测量交易所的延迟
    • 理解交易所的关键环节
    • 测量市场数据发布者内部的延迟
    • 测量订单服务器内部的延迟
    • 测量撮合引擎和订单簿内部的延迟
  • 测量交易引擎内部的延迟
    • 理解内部测量方法
    • 理解交易客户端系统中的关键节点
    • 测量市场数据消费者内部的延迟
    • 测量订单网关内部的延迟
    • 测量交易引擎内部的延迟
  • 使用新的检测系统运行整个生态系统
  • 总结

第12章:分析和优化C++系统的性能

  • 技术要求
  • 分析我们交易生态系统的性能
    • 回顾我们测量的延迟
    • 分析性能
    • 理解分析结果
  • 探讨优化C++交易系统的技巧和方法
    • 优化发布版本构建
    • 正确设置线程亲和性
    • 优化日志记录器对字符串的处理
    • 避免使用std::function实例
    • 检查这些优化的效果
  • 思考我们交易生态系统的未来发展
    • 动态扩展容器
    • 扩展和增强哈希映射
    • 优化快照消息
    • 在订单协议中添加认证和拒绝消息
    • 在订单协议中支持修改消息
    • 增强交易引擎组件
  • 总结

https://blog.csdn.net/gitblog_00035/article/details/139285309

https://gitcode.com/gh_mirrors/bu/Building-Low-Latency-Applications-with-CPP/?utm_source=artical_gitcode&index=bottom&type=card

探索超低延迟编程的艺术:《使用C++构建低延迟应用程序》

项目地址:https://gitcode.com/gh_mirrors/bu/Building-Low-Latency-Applications-with-CPP

在现代计算领域,速度是王道。《使用C++构建低延迟应用程序》 这本书正是为那些追求极致性能的开发者而生。这本书由经验丰富的专家 Sourav Ghosh 撰写,它将带你深入了解如何利用C++这一强大工具开发实时低延迟应用,尤其是在高频交易领域的实践。
项目简介

这个项目包含了书中的所有示例代码,按照章节结构组织,方便读者边学边练。通过这些实际案例,你将有机会亲自动手打造一个完整的低延迟交易平台,以提升你的编程技巧和理解深度。
技术分析

作者引导你深入探讨C++的设计原则和特性,教你如何明智地选择并运用C++的各种功能来实现低延迟目标。从理解低延迟应用的本质到避开可能影响性能的因素,每一部分都旨在提高你的编程效率和系统的响应速度。
应用场景

这本书不仅限于理论教学,更注重实战应用。特别是在金融交易领域,如高频交易(HFT),书中详尽讲解了如何设计和优化超低延迟系统。但其理念和方法同样适用于任何对响应时间有严格要求的行业,如云计算、物联网(IoT)以及实时数据分析等。
项目特点

实用性强:所有示例代码都是为了解决实际问题,你可以直接在Linux环境中运行,并根据需要进行修改。
深挖C++:特别关注C++中对性能影响深远的语言特性,既指出哪些应避免,又强调哪些应充分利用。
面向未来:涵盖最新的C++20标准,让你跟上时代的步伐。
详尽指导:从性能测量到系统优化,提供了一整套策略和最佳实践。

如果你是一名C++开发者,渴望提升你的低延迟应用开发技能,或者你正处在寻找有效优化高频交易系统的道路上,那么这本书无疑是你的理想之选。现在就行动起来,购买你的电子版或纸质版图书,开启你的低延迟编程之旅吧!

探索更多高质量的技术书籍,可以访问Packt Publishing 的官方网址。

Building-Low-Latency-Applications-with-CPP Building Low Latency Applications with CPP by Packt Publishing 项目地址: https://gitcode.com/gh_mirrors/bu/Building-Low-Latency-
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/gitblog_00035/article/details/139285309

使用C++构建低延迟应用程序

Building Low Latency Applications with C++

这是《使用C++构建低延迟应用程序》一书的代码仓库,由Packt出版社出版。

利用现代C++从零开始开发完整的低延迟交易生态系统
这本书关于什么?

C++的设计初衷是效率、性能和灵活性为核心,但在实时低延迟应用领域,则需要一套特定于性能延迟要求的技术栈。

本书包含以下精彩特性:

深入了解不同行业中的低延迟应用的本质
掌握设计与实现低延迟应用的方法
探索适用于低延迟开发的C++设计模式与特性
发现低延迟开发中应避免使用的C++特性
实施低延迟的最佳实践与C++特性
测量性能并优化交易系统中的延迟

如果你认为这本书适合你,今天就获取你的副本吧!

Packt Publishing
指南与导航

所有代码都组织在不同的文件夹中。例如,Chapter02。

代码示例如下所示:

main:
.LFB1
Movl $100, %edi
Call _Z9factorialj

本书所需前提条件: 本书面向希望掌握低延迟应用技术及有效设计与开发策略的C++开发者。对于希望建立高速交易系统(如HFT)知识的C++软件工程师,以及想要深入了解哪些C++特性在低延迟实施中至关重要、哪些应当避免的量化交易行业的研究人员来说,本书非常有用。读者需要具备Linux操作系统和C++编程语言的基础知识。
软件与硬件列表
章节 必需的软件 需要的操作系统
1 C++ 20 Linux
2 GCC 11.3.0 Linux

我们也提供了一份PDF文件,其中包含了书中使用的所有截图和图表的彩色版。点击这里下载。
相关产品 <你可能也会喜欢的其他书籍>

《C++中的软件架构》[Packt][亚马逊]
《开发高频交易系统》[Packt][亚马逊]

认识作者

Sourav Ghosh 过去十年里在多家专营高频算法交易公司工作过,他构建并部署了极高低延迟、高吞吐量的自动化交易系统,这些系统用于全球各地的交易交易所,涵盖多种资产类别。他在统计套利市场制造和配对交易策略方面具有专长,专注于全球最流动的期货合约。目前他在芝加哥的一家交易公司担任高级定量开发人员。他拥有南加州大学计算机科学硕士学位,兴趣领域包括计算机架构、金融科技、概率论与随机过程、统计学习与推理方法以及自然语言处理。