HTTP/WebSocketサービスを構築するための、高速で使いやすいFlask風C++マイクロフレームワーク。ヘッダーオンリーで利用できます。
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 の数値は毎日更新されます。
関連プロジェクト
STL風の構文でJSONの解析、構築、操作、シリアライズができる、ヘッダーオンリーのC++11ライブラリ。
C stdioやiostreamsに代わる高速で型安全なC++フォーマットライブラリ。C++20のstd::formatを実装しています。
フォーマットとI/Oをバックグラウンドスレッドに委ねる、超低レイテンシの非同期C++17ロギング・メトリクスライブラリ。
バックグラウンドタスク、AIエージェント、永続ワークフローをオーケストレーションするエンジン。Python、TypeScript、Go、RubyのSDKを備え、永続化レイヤーにPostgresを採用。
concurrent.futuresを使ってHTTPリクエストを非同期に送信する、Pythonのrequestsライブラリ向け小型アドオンです。