Быстрый микрофреймворк на C++ в стиле Flask для создания HTTP- и WebSocket-сервисов: header-only и простой в использовании.
max0x7ba/atomic_queue
Заголовочная C++14-библиотека с lock-free очередями на кольцевых буферах для обмена сообщениями между потоками с минимальной задержкой от push до pop.
- Звёзды
- 1,899
- Форки
- 221
- Открытые issues
- 1
- Последний коммит
- 6 дней назад
Что это?
atomic_queue — набор C++14-очередей с несколькими производителями и потребителями, распространяемых только в виде заголовочных файлов и построенных на кольцевых буферах фиксированной ёмкости и std::atomic. Их заявленная цель — свести к минимуму время между добавлением элемента в одном потоке и его извлечением в другом. Поэтому библиотека подходит для чувствительного к задержкам кода, например торговых систем и горячих участков логирования.
Ёмкость очередей задаётся при компиляции или создании, поэтому после создания память в куче не выделяется. Есть варианты для атомарных типов элементов и для неатомарных типов, например std::unique_ptr, с буферами на основе массивов или кучи. Варианты на основе массивов с позиционно-независимой адресацией можно размещать в разделяемой памяти для межпроцессного взаимодействия. Доступны как формы push/pop с ожиданием на spinlock, так и неблокирующие try_push/try_pop; также есть режим SPSC, не использующий атомарные операции read-modify-write.
Проект тестируется в CI на Linux x86_64 и ARM, а также в кроссплатформенных запусках под QEMU для RISC-V, PowerPC, s390x и LoongArch и на Windows x86_64 и macOS ARM через CMake. Подключить библиотеку можно через CMake, vcpkg или Conan.
Ключевые возможности
- 01Библиотека C++14, распространяемая только в виде заголовочных файлов; для использования сборка не требуется.
- 02Кольцевые буферы фиксированной ёмкости, не выделяющие память в куче после создания.
- 03Варианты для атомарных и неатомарных типов элементов, включая перемещаемые типы вроде std::unique_ptr.
- 04Очереди на основе массивов с позиционно-независимой адресацией, которые можно размещать в разделяемой памяти.
- 05Опциональный режим push и pop с полным порядком FIFO.
- 06Неблокирующие формы try_push/try_pop и формы push/pop с ожиданием на spinlock.
Сценарии использования
- Передача рыночных данных или ордеров между потоками в чувствительном к задержкам торговом ПО.
- Передача записей логов из горячего участка к фоновому потоку форматирования и вывода.
- Передача небольших сообщений между процессами через сегмент разделяемой памяти.
- Распределение задач от производителей между пулом рабочих потоков с ограниченной ёмкостью.
Что важно знать
- Ёмкость очереди фиксируется во время компиляции или создания, поэтому её нельзя увеличить.
- Функций push или pop с блокировкой на уровне ОС нет, поэтому ожидающие потоки активно опрашивают очередь и расходуют процессорное время.
- Разработка и тестирование в основном проводились на Linux x86_64, поэтому на других платформах решение проверено хуже.
Темы
Частые вопросы
- Что такое atomic_queue?
- Заголовочная C++14-библиотека с lock-free очередями на кольцевых буферах для обмена сообщениями между потоками с минимальной задержкой от push до pop. atomic_queue — набор C++14-очередей с несколькими производителями и потребителями, распространяемых только в виде заголовочных файлов и построенных на кольцевых буферах фиксированной ёмкости и std::atomic. Их заявленная цель — свести к минимуму время между добавлением элемента в одном потоке и его извлечением в другом. Поэтому библиотека подходит для чувствительного к задержкам кода, например торговых систем и горячих участков логирования.
- atomic_queue можно использовать бесплатно? Какая у него лицензия?
- atomic_queue распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- atomic_queue всё ещё поддерживается?
- Активно поддерживается. Последний коммит в atomic_queue — 16 окт. 2026 г..
- Для чего можно использовать atomic_queue?
- Передача рыночных данных или ордеров между потоками в чувствительном к задержкам торговом ПО. Передача записей логов из горячего участка к фоновому потоку форматирования и вывода. Передача небольших сообщений между процессами через сегмент разделяемой памяти. Распределение задач от производителей между пулом рабочих потоков с ограниченной ёмкостью.
- Где скачать atomic_queue?
- Исходный код и инструкции по установке — на GitHub: https://github.com/max0x7ba/atomic_queue
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
Библиотека C++11, состоящая из одного заголовочного файла и позволяющая разбирать, создавать, изменять и сериализовать JSON с синтаксисом в духе STL.
Библиотека форматирования C++ — быстрая и типобезопасная альтернатива C stdio и iostreams с поддержкой C++20 std::format.
Асинхронная библиотека логирования и метрик на C++17 с минимальными задержками: форматирование и ввод-вывод выполняются в фоновом потоке.
Движок оркестрации фоновых задач, AI-агентов и долговечных рабочих процессов с SDK для Python, TypeScript, Go и Ruby и Postgres в качестве слоя надёжного хранения.
Небольшое дополнение к библиотеке Python requests для асинхронной отправки HTTP-запросов с помощью concurrent.futures.