リモート マシンからメッセージを受信し、そのメッセージをディスク上のファイルに書き込む必要があるプログラムを作成しています。私が見つけている困難は、このプログラムの目的がメッセージを受信するライブラリのパフォーマンスをテストすることであるため、メッセージをディスクに書き込むことがライブラリのパフォーマンスに影響を与えないことを確認する必要があるという事実にあります. ライブラリは、コールバック関数を介してメッセージをプログラムに配信します。もう 1 つの問題は、ソリューションがプラットフォームに依存しないことです。
どのようなオプションがありますか?
私は次のことを考えました:
boost:asio
ファイルへの書き込みに使用していますが、ファイルへの非同期書き込みはこのライブラリの Windows 固有の部分にあるようです (このドキュメントを参照)。したがって、これは使用できません。- を使用
boost::interprocess
してメッセージキューを作成しますが、このドキュメントは、メッセージを送信できる方法が3つあり、メッセージキューがいっぱいの場合、すべての方法でプログラムをブロックする必要があることを示しています(暗黙的または非明示的)。 - を作成し
std::deque<MESSAGES>
てコールバック関数から両端キューにプッシュし、ファイルへの書き込み中に (別のスレッドで) メッセージをポップアウトしますが、STL コンテナーはスレッドセーフであるとは限りません。両端キューへのプッシュとポップオフをロックすることはできますが、連続するメッセージ間の間隔は約 47 マイクロ秒であるため、ロックを完全に回避したいと考えています。
考えられる解決策について、これ以上のアイデアはありますか?