43

2つのプロセスがあり、1つは他のデータをクエリします。限られた時間(1秒あたり10000)で大量のクエリが発生し、1秒あたりデータ(> 100 mb)が転送されます。データのタイプは整数型(double)になります。 、int)私の質問は、このプロセスをどのように接続するかです。

共有メモリ、メッセージキュー、lpc(ローカルプロシージャコール)など...

また、どのライブラリを提案するか尋ねたいですか?ちなみにMPIは提案しないでください。編集:WindowsXP32ビットの下

4

5 に答える 5

44

一言:Boost.InterProcess。本当に高速である必要がある場合は、共有メモリが最適です。オペレーティングシステムが仮想アドレスと物理アドレスの間の通常のマッピングを実行し、データのコピーが不要なため、オーバーヘッドはほぼゼロです。並行性の問題に注意する必要があります。

シャットダウンクエリなどのコマンドを実際に送信するには、メッセージキューを使用します。私は以前、ローカルホストネットワークプログラミングを使用してそれを行い、ブーストについて知る前に手動の共有メモリ割り当てを使用していました。アプリを書き直す必要がある場合は、すぐにブーストを選択します。Boost.InterProcessを使用すると、これがより簡単になります。見てみな。

于 2008-12-16T18:26:31.857 に答える
4

私は Marc の提案を支持します -- 移植性に懸念がある場合や、共有メモリ上に標準のコンテナー タイプをマップするようなクールなことをしたい場合 (その場合、私は間違いなく boost を使用します) を除き、boost は気にしません。

それ以外の場合、メッセージ キューと共有メモリは非常に簡単に処理できます。

于 2008-12-16T19:05:55.037 に答える
4

データが複数のタイプで構成されている場合、および/またはミューテックスなどが必要な場合は、Boost を使用してください。それ以外の場合は、#pragma data_seg またはメモリ マップ ファイルを使用してメモリの共有セクションを使用します。

于 2011-07-21T23:59:29.233 に答える
3

共有メモリを使用する場合は、スピンするかどうかを決定する必要があります。同期にセマフォを使用し、共有メモリにデータを格納する場合、メッセージ キューを使用する場合と比較してパフォーマンス上の利点はあまり得られないと思いますが (明確性が大幅に低下します)、同期のためにアトミック変数を使用すると、その結果に苦しむ必要があります。

于 2008-12-16T19:08:13.940 に答える