Um microframework C++ rápido, no estilo do Flask, para criar serviços web HTTP e WebSocket, distribuído como header-only e fácil de usar.
max0x7ba/atomic_queue
Filas ring buffer lock-free de C++14, em header-only, para troca de mensagens entre threads com latência mínima entre push e pop.
- Estrelas
- 1,899
- Forks
- 221
- Issues abertas
- 1
- Último commit
- há 7 dias
O que é?
atomic_queue é um conjunto de filas de C++14 header-only para múltiplos produtores e múltiplos consumidores, construídas sobre ring buffers de capacidade fixa e std::atomic. O objetivo declarado é minimizar o tempo entre uma thread inserir um elemento e outra removê-lo, por isso a biblioteca é voltada a código sensível à latência, como sistemas de trading e caminhos críticos de logging.
As filas têm capacidade fixa, definida em tempo de compilação ou na construção, então não há alocação no heap após a construção. Há variantes para tipos atômicos e não atômicos, como std::unique_ptr, com buffers baseados em arrays ou no heap. Variantes baseadas em arrays e independentes de posição podem ser usadas em memória compartilhada para comunicação entre processos. A biblioteca oferece versões de push/pop com espera ativa e versões não bloqueantes de try_push/try_pop, além de um modo SPSC que evita operações atômicas de read-modify-write.
O projeto é testado no CI em Linux x86_64 e ARM, além de execuções entre arquiteturas sob QEMU para RISC-V, PowerPC, s390x e LoongArch, e no Windows x86_64 e macOS ARM via CMake. É possível usá-lo por meio do CMake, vcpkg ou Conan.
Recursos principais
- 01Biblioteca C++14 header-only, sem necessidade de etapa de build para usá-la.
- 02Ring buffers de capacidade fixa, sem alocação no heap após a construção.
- 03Variantes para tipos de elemento atômicos e não atômicos, incluindo tipos que só podem ser movidos, como std::unique_ptr.
- 04Filas baseadas em arrays e independentes de posição, que podem ser usadas em memória compartilhada.
- 05Modo opcional de ordenação FIFO total para push e pop.
- 06Versões não bloqueantes de try_push/try_pop e versões de push/pop com espera ativa.
Casos de uso
- Trocar dados de mercado ou ordens entre threads em software de trading sensível à latência.
- Descarregar registros de log de um caminho crítico para uma thread em segundo plano responsável pela formatação e pela E/S.
- Trocar mensagens pequenas entre processos por meio de um segmento de memória compartilhada.
- Distribuir tarefas de produtores para um conjunto de threads de trabalho com capacidade limitada.
Antes de usar
- A capacidade da fila é definida em tempo de compilação ou na construção, portanto não pode crescer.
- Não há funções push ou pop que bloqueiem no nível do sistema operacional, então as threads em espera ficam em loop e consomem CPU.
- Foi desenvolvido e testado principalmente no Linux x86_64, então há menos validação em outras plataformas.
Tópicos
Perguntas frequentes
- O que é atomic_queue?
- Filas ring buffer lock-free de C++14, em header-only, para troca de mensagens entre threads com latência mínima entre push e pop. atomic_queue é um conjunto de filas de C++14 header-only para múltiplos produtores e múltiplos consumidores, construídas sobre ring buffers de capacidade fixa e std::atomic. O objetivo declarado é minimizar o tempo entre uma thread inserir um elemento e outra removê-lo, por isso a biblioteca é voltada a código sensível à latência, como sistemas de trading e caminhos críticos de logging.
- atomic_queue é gratuito? Qual é a licença?
- atomic_queue é open source sob a licença MIT. Confira os termos da licença antes de usá-lo em produtos comerciais.
- atomic_queue ainda é mantido?
- Manutenção ativa. O último commit de atomic_queue foi em 16 de out. de 2026.
- Para que posso usar atomic_queue?
- Trocar dados de mercado ou ordens entre threads em software de trading sensível à latência. Descarregar registros de log de um caminho crítico para uma thread em segundo plano responsável pela formatação e pela E/S. Trocar mensagens pequenas entre processos por meio de um segmento de memória compartilhada. Distribuir tarefas de produtores para um conjunto de threads de trabalho com capacidade limitada.
- Onde consigo atomic_queue?
- O código-fonte e as instruções de instalação estão no GitHub: https://github.com/max0x7ba/atomic_queue
Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.
Projetos relacionados
Biblioteca C++11 header-only que permite analisar, criar, manipular e serializar JSON em C++ com uma sintaxe semelhante à da STL.
Uma biblioteca de formatação para C++ que oferece uma alternativa rápida e segura quanto aos tipos a C stdio e iostreams, implementando std::format do C++20.
Biblioteca assíncrona de logging e métricas em C++17, com latência ultrabaixa, que adia a formatação e a I/O para uma thread em segundo plano.
Um mecanismo de orquestração para tarefas em segundo plano, agentes de IA e workflows duráveis, com SDKs para Python, TypeScript, Go e Ruby e Postgres como camada de durabilidade.
Um complemento leve para a biblioteca requests do Python que envia requisições HTTP de forma assíncrona usando concurrent.futures.