Microframework de C++ rápido y al estilo de Flask para crear servicios web HTTP y WebSocket; solo requiere archivos de cabecera y es fácil de usar.
max0x7ba/atomic_queue
Colas lock-free de búfer circular, solo de cabeceras y compatibles con C++14, para pasar mensajes entre hilos con una latencia mínima entre inserción y extracción.
- Estrellas
- 1,899
- Forks
- 221
- Issues abiertos
- 1
- Último commit
- hace 7 días
¿Qué es?
atomic_queue es un conjunto de colas de múltiples productores y múltiples consumidores, solo de cabeceras y compatibles con C++14, basado en búferes circulares de capacidad fija y std::atomic. Su objetivo declarado es minimizar el tiempo entre que un hilo inserta un elemento y otro lo extrae, por lo que está pensado para código sensible a la latencia, como los sistemas de trading y las rutas críticas de registro.
Las colas tienen una capacidad fija, definida en tiempo de compilación o durante la construcción, así que no se asigna memoria en el heap después de construirlas. Hay variantes para tipos de elementos atómicos y no atómicos, como std::unique_ptr, con búferes respaldados por arrays o por el heap. Las variantes basadas en arrays y con independencia de posición se pueden colocar en memoria compartida para usarlas entre procesos. Se ofrecen tanto las operaciones push/pop con espera activa como las versiones no bloqueantes try_push/try_pop, además de un modo SPSC que evita las operaciones atómicas de lectura-modificación-escritura.
El proyecto se prueba en CI en Linux x86_64 y ARM, además de ejecutarse entre arquitecturas con QEMU para RISC-V, PowerPC, s390x y LoongArch, y en Windows x86_64 y macOS ARM mediante CMake. Se puede integrar mediante CMake, vcpkg o Conan.
Funciones clave
- 01Biblioteca para C++14, solo de cabeceras, que no requiere una fase de compilación para usarla.
- 02Búferes circulares de capacidad fija, sin asignaciones en el heap después de la construcción.
- 03Variantes para tipos de elementos atómicos y no atómicos, incluidos tipos que solo se pueden mover, como std::unique_ptr.
- 04Colas basadas en arrays y con independencia de posición que pueden residir en memoria compartida.
- 05Modo opcional FIFO con orden total para push y pop.
- 06Versiones no bloqueantes try_push/try_pop y versiones push/pop con espera activa.
Casos de uso
- Pasar datos de mercado u órdenes entre hilos en software de trading sensible a la latencia.
- Enviar registros desde una ruta crítica a un hilo en segundo plano que se encargue de darles formato y escribirlos.
- Pasar mensajes pequeños entre procesos mediante un segmento de memoria compartida.
- Distribuir tareas de los productores a un conjunto de hilos de trabajo con capacidad limitada.
Antes de usarlo
- La capacidad de la cola se fija en tiempo de compilación o al construirla, por lo que no puede crecer.
- No hay funciones push o pop que bloqueen a nivel del sistema operativo, así que los hilos en espera quedan girando y consumen CPU.
- Se desarrolló y probó principalmente en Linux x86_64, por lo que está menos probado en otras plataformas.
Temas
Preguntas frecuentes
- ¿Qué es atomic_queue?
- Colas lock-free de búfer circular, solo de cabeceras y compatibles con C++14, para pasar mensajes entre hilos con una latencia mínima entre inserción y extracción. atomic_queue es un conjunto de colas de múltiples productores y múltiples consumidores, solo de cabeceras y compatibles con C++14, basado en búferes circulares de capacidad fija y std::atomic. Su objetivo declarado es minimizar el tiempo entre que un hilo inserta un elemento y otro lo extrae, por lo que está pensado para código sensible a la latencia, como los sistemas de trading y las rutas críticas de registro.
- ¿atomic_queue es gratuito? ¿Qué licencia tiene?
- atomic_queue es open source bajo la licencia MIT. Revisa los términos de la licencia antes de usarlo en productos comerciales.
- ¿atomic_queue sigue mantenido?
- Mantenimiento activo. El último commit de atomic_queue fue el 16 oct 2026.
- ¿Para qué puedo usar atomic_queue?
- Pasar datos de mercado u órdenes entre hilos en software de trading sensible a la latencia. Enviar registros desde una ruta crítica a un hilo en segundo plano que se encargue de darles formato y escribirlos. Pasar mensajes pequeños entre procesos mediante un segmento de memoria compartida. Distribuir tareas de los productores a un conjunto de hilos de trabajo con capacidad limitada.
- ¿Dónde consigo atomic_queue?
- El código fuente y las instrucciones de instalación están en GitHub: https://github.com/max0x7ba/atomic_queue
Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.
Proyectos relacionados
Una biblioteca header-only para C++11 que permite analizar, crear, manipular y serializar JSON con una sintaxis similar a la de STL.
Una biblioteca de formato para C++ rápida y segura en cuanto a tipos, alternativa a C stdio e iostreams, que implementa std::format de C++20.
Biblioteca asíncrona de logging y métricas en C++17 con latencia ultrabaja que delega el formateo y la E/S a un hilo en segundo plano.
Motor de orquestación para tareas en segundo plano, agentes de IA y workflows durables, con SDK para Python, TypeScript, Go y Ruby, y Postgres como capa de durabilidad.
Un complemento pequeño para la biblioteca requests de Python que envía solicitudes HTTP de forma asíncrona con concurrent.futures.