Repolode
max0x7ba

max0x7ba/atomic_queue

スレッド間のメッセージ受け渡しを低レイテンシで実現する、ヘッダーのみのC++14製ロックフリー・リングバッファキュー。

スター
1,899
フォーク
221
未解決の Issue
1
最終コミット
7 日前

これは何?

atomic_queueは、固定容量のリングバッファとstd::atomicを基盤とする、ヘッダーのみのC++14製マルチプロデューサー・マルチコンシューマーキュー群です。あるスレッドが要素をpushしてから別のスレッドがpopするまでの時間を最小限に抑えることを目指しており、トレーディングシステムやロギングのホットパスなど、レイテンシに敏感なコードを対象としています。

キューの容量はコンパイル時または生成時に固定されるため、生成後にヒープ割り当ては発生しません。atomic型の要素向けと、std::unique_ptrなどの非atomic型向けのバリアントがあり、配列ベースとヒープベースのバッファを選べます。位置に依存しない配列ベースのバリアントは、プロセス間通信に共有メモリ上で配置できます。spin-waitするpush/popと、ブロックしないtry_push/try_popの両方を利用でき、read-modify-write型のatomicを使わないSPSCモードも備えています。

CIではLinuxのx86_64とARMに加え、QEMUによるRISC-V、PowerPC、s390x、LoongArchのクロスアーキテクチャ実行、さらにCMake経由でWindowsのx86_64とmacOSのARMを対象にテストしています。CMake、vcpkg、Conan経由で利用できます。

主な機能

  • 01ビルド工程なしで利用できる、ヘッダーのみのC++14ライブラリ。
  • 02生成後にヒープ割り当てが発生しない、固定容量のリングバッファ。
  • 03std::unique_ptrのようなムーブ専用型を含む、atomic型・非atomic型の要素向けバリアント。
  • 04共有メモリ上に配置できる、位置に依存しない配列ベースのキュー。
  • 05pushとpopを完全に順序付けるFIFOモードを任意で利用可能。
  • 06ブロックしないtry_push/try_popと、spin-waitするpush/popの各形式。

ユースケース

  • レイテンシに敏感なトレーディングソフトウェアで、市場データや注文をスレッド間で受け渡す。
  • ホットパスからログレコードをバックグラウンドのフォーマット・I/Oスレッドへ渡す。
  • 共有メモリセグメントを介して、プロセス間で小さなメッセージを受け渡す。
  • 容量に上限のあるキューで、プロデューサーからワーカースレッドのプールへタスクを配布する。

使う前に知っておきたいこと

  • キューの容量はコンパイル時または構築時に固定されるため、拡張できません。
  • OSによってブロックされる push/pop 関数がないため、待機中のスレッドはスピンしてCPUを消費します。
  • 主にLinux x86_64上で開発・ベンチマークされているため、他のプラットフォームでの実績は限定的です。

トピック

よくある質問

atomic_queue とは?
スレッド間のメッセージ受け渡しを低レイテンシで実現する、ヘッダーのみの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 の数値は毎日更新されます。

関連プロジェクト