1

2 つのプロセスがあり、一方のプロセスが他方のプロセスと高いデータ スループットで通信できるようにしたいと考えています。IPC(具体的にはboost::iterprocess)とソケットを試しましたが、パフォーマンス/スループットが遅すぎて使用できません。

私のフォールバック オプションは、2 番目のプロセスを最初のプロセスのアタッチされた子として起動することです (その dll をロードし、「ツール」を作成するなど)。 DLL を使用してインターフェイス関数を呼び出すだけです。

私はこのようにそれを避ける方法を探していますが、それでもその程度のパフォーマンスを持っています. 2 つのプロセスがロードできる DLL を設定して、何らかの形でメモリ空間を共有することは可能ですか? ここでの選択肢は IPC とソケットだけですか?

4

3 に答える 3

1

Windows では、名前付きパイプを使用できます。ローカルで使用すると、ソケットよりも効率的であると考えられていました。しかし、彼らは時代遅れになりました。詳細については、名前付きパイプに関する Microsoft ドキュメントをご覧ください。

于 2013-02-11T21:21:32.083 に答える
0

ローカルプロセスの場合、共有ファイルを使用できます。ファイルをメモリマップすると、はるかに高速になります。

于 2013-02-11T21:22:57.013 に答える
0

あなたの質問の「IPC」とは何ですか?ソケット、パイプ、共有メモリはすべてIPCを実行する方法です。はい、Windows、Linux、その他の汎用システムで共有メモリを使用できます。C ++では、メモリブロックを共有として宣言するか(少なくともWindowsでは)、メモリマップトファイル(MMF)関数を呼び出すことができます。LinuxおよびBSDでは、メモリマップトファイル関数も使用します。MMFは、2番目のプロセスをDLLに変換する以外に、可能な限り最速の方法です。名前付きパイプやその他のものは遅いです。

于 2013-02-11T21:30:40.170 に答える