HTTP 및 WebSocket 웹 서비스를 만들기 위한 빠르고 사용하기 쉬운 Flask 스타일의 헤더 전용 C++ 마이크로프레임워크입니다.
max0x7ba/atomic_queue
스레드 간 메시지를 최소한의 push-to-pop 지연으로 전달하는 헤더 전용 C++14 무잠금 링 버퍼 큐입니다.
- 스타
- 1,899
- 포크
- 221
- 열린 이슈
- 1
- 마지막 커밋
- 7일 전
어떤 프로젝트인가요?
atomic_queue는 고정 용량 링 버퍼와 std::atomic을 기반으로 만든 헤더 전용 C++14 다중 생산자·다중 소비자 큐 모음입니다. 한 스레드가 요소를 push한 뒤 다른 스레드가 pop할 때까지 걸리는 시간을 최소화하는 것이 목표이므로, 트레이딩 시스템이나 로깅 핫 패스처럼 지연 시간에 민감한 코드에 적합합니다.
큐 용량은 컴파일 시점이나 생성 시점에 고정되므로 생성 후에는 힙 할당이 발생하지 않습니다. std::unique_ptr 같은 비원자 타입과 원자 타입을 위한 구현이 있으며, 버퍼는 배열 기반 또는 힙 기반으로 제공됩니다. 위치 독립적인 배열 기반 구현은 프로세스 간 통신을 위해 공유 메모리에 배치할 수 있습니다. 스핀 대기 방식의 push/pop과 논블로킹 try_push/try_pop을 모두 지원하며, read-modify-write 원자 연산을 피하는 SPSC 모드도 제공합니다.
Linux x86_64와 ARM에서 CI 테스트를 수행하며, QEMU를 통한 RISC-V, PowerPC, s390x, LoongArch 교차 아키텍처 테스트와 CMake를 사용한 Windows x86_64 및 macOS ARM 테스트도 진행합니다. CMake, vcpkg 또는 Conan을 통해 사용할 수 있습니다.
핵심 기능
- 01별도의 빌드 단계 없이 사용할 수 있는 헤더 전용 C++14 라이브러리입니다.
- 02생성 후 힙 할당이 발생하지 않는 고정 용량 링 버퍼입니다.
- 03std::unique_ptr 같은 이동 전용 타입을 포함해 원자 및 비원자 요소 타입을 위한 구현을 제공합니다.
- 04공유 메모리에 둘 수 있는 위치 독립적인 배열 기반 큐입니다.
- 05push와 pop에 선택적으로 완전한 순서를 보장하는 FIFO 모드를 제공합니다.
- 06논블로킹 try_push/try_pop과 스핀 대기 방식의 push/pop을 지원합니다.
활용 사례
- 지연 시간에 민감한 트레이딩 소프트웨어에서 스레드 간에 시장 데이터나 주문을 전달합니다.
- 핫 패스에서 로그 레코드를 포맷 및 I/O를 처리하는 백그라운드 스레드로 넘깁니다.
- 공유 메모리 세그먼트를 통해 프로세스 간에 작은 메시지를 전달합니다.
- 용량을 제한한 상태로 생산자에서 작업자 스레드 풀에 작업을 분배합니다.
사용 전 알아둘 점
- 큐 용량은 컴파일 시 또는 생성 시 고정되므로 늘릴 수 없습니다.
- OS 차원에서 차단되는 push 또는 pop 함수가 없어 대기 중인 스레드가 스핀하며 CPU를 사용합니다.
- 주로 Linux x86_64에서 개발하고 벤치마크했기 때문에 다른 플랫폼에서의 검증은 부족합니다.
토픽
자주 묻는 질문
- atomic_queue은(는) 무엇인가요?
- 스레드 간 메시지를 최소한의 push-to-pop 지연으로 전달하는 헤더 전용 C++14 무잠금 링 버퍼 큐입니다. atomic_queue는 고정 용량 링 버퍼와 std::atomic을 기반으로 만든 헤더 전용 C++14 다중 생산자·다중 소비자 큐 모음입니다. 한 스레드가 요소를 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
요약은 프로젝트 README를 바탕으로 AI가 작성했습니다. GitHub 통계는 매일 갱신됩니다.
관련 프로젝트
C++ 코드에서 STL과 비슷한 문법으로 JSON을 파싱하고 생성·조작·직렬화할 수 있는 헤더 전용 C++11 라이브러리입니다.
C stdio와 iostreams보다 빠르고 타입 안전한 대안을 제공하며 C++20 std::format을 구현한 C++ 포맷팅 라이브러리입니다.
포맷과 I/O를 백그라운드 스레드로 미루는 초저지연 비동기 C++17 로깅 및 메트릭 라이브러리입니다.
Python, TypeScript, Go, Ruby SDK와 내구성 계층인 Postgres를 지원하는 백그라운드 작업, AI 에이전트 및 내구성 있는 워크플로 오케스트레이션 엔진입니다.
concurrent.futures를 사용해 HTTP 요청을 비동기로 보내는 Python requests 라이브러리용 소형 애드온입니다.