Repolode
max0x7ba

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