Repolode
max0x7ba

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 통계는 매일 갱신됩니다.

관련 프로젝트