一套仅含头文件的 C++ 哈希表与 B 树容器库,可替代 std 中的无序和有序容器,速度快、内存占用低。
max0x7ba/atomic_queue
纯头文件的 C++14 无锁环形缓冲队列,用于线程间以极低延迟传递消息。
- Star
- 1,899
- Fork
- 221
- 未关闭 Issue
- 1
- 最近提交
- 7天前
这是什么?
atomic_queue 是一组纯头文件的 C++14 多生产者多消费者队列,基于固定容量的环形缓冲区和 std::atomic 实现。项目的目标是尽量缩短一个线程 push 元素到另一个线程 pop 出来之间的延迟,适合交易系统、日志热路径等对延迟敏感的场景。
队列容量在编译期或构造时固定,构造之后不再进行堆内存分配。库中既有面向原子类型元素的版本,也有面向 std::unique_ptr 等非原子类型的版本,并分别提供数组存储和堆存储两种缓冲区。数组版本不含指针成员,可放入共享内存用于进程间通信。除了自旋等待的 push/pop,还提供非阻塞的 try_push/try_pop,并支持单生产者单消费者模式以避免读-改-写原子指令。
项目在 CI 中覆盖 Linux x86_64 和 ARM,并通过 QEMU 运行 RISC-V、PowerPC、s390x、LoongArch 的交叉架构测试,同时通过 CMake 在 Windows x86_64 和 macOS ARM 上构建。可通过 CMake、vcpkg 或 Conan 引入。
核心功能
- 01纯头文件 C++14 库,使用时无需编译或安装。
- 02固定容量环形缓冲区,构造后不做堆内存分配。
- 03同时支持原子类型与 std::unique_ptr 等仅可移动的非原子类型元素。
- 04位置无关的数组队列,可放置在共享内存中用于进程间通信。
- 05push 和 pop 支持可选的全序 FIFO 模式。
- 06提供非阻塞的 try_push/try_pop,以及自旋等待的 push/pop。
适用场景
- 在对延迟敏感的交易软件中,在线程间传递行情或订单数据。
- 将日志记录从关键路径转交给后台线程做格式化和 I/O。
- 通过共享内存段在进程之间传递小消息。
- 以有界容量将任务从生产者分发给一组工作线程。
使用前须知
- 队列容量在编译期或构造时固定,无法动态增长。
- 没有操作系统阻塞式的 push 或 pop 函数,等待的线程会自旋并占用 CPU。
- 主要在 Linux x86_64 上开发和测试,其他平台的验证较少。
标签
常见问题
- atomic_queue 是什么?
- 纯头文件的 C++14 无锁环形缓冲队列,用于线程间以极低延迟传递消息。 atomic_queue 是一组纯头文件的 C++14 多生产者多消费者队列,基于固定容量的环形缓冲区和 std::atomic 实现。项目的目标是尽量缩短一个线程 push 元素到另一个线程 pop 出来之间的延迟,适合交易系统、日志热路径等对延迟敏感的场景。
- atomic_queue 可以免费使用吗?用的什么许可证?
- atomic_queue 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
- atomic_queue 还在维护吗?
- 活跃维护中。atomic_queue 最近一次提交是在 2026年10月16日。
- atomic_queue 适合用来做什么?
- 在对延迟敏感的交易软件中,在线程间传递行情或订单数据。 将日志记录从关键路径转交给后台线程做格式化和 I/O。 通过共享内存段在进程之间传递小消息。 以有界容量将任务从生产者分发给一组工作线程。
- 在哪里获取 atomic_queue?
- 源代码和安装说明在 GitHub 上:https://github.com/max0x7ba/atomic_queue
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
一个 C++11 单头文件库,用于构建 HTTP/HTTPS 服务端和客户端,采用阻塞式 socket I/O。
一个快速、易用、类 Flask 路由风格的 C++ 微框架,用于构建 HTTP 和 WebSocket 服务。
纯头文件的 C++ 库,快速且精确地把字符串解析为 float、double 和整数,实现 from_chars 接口。
面向 C++17 的超低延迟异步日志与指标库,将格式化和 I/O 交给后台线程处理。
一个仅头文件的 C++11 库,用类似 STL 的语法在 C++ 中解析、构造、操作和序列化 JSON。