0

私はboost::interprocess_mutex、アプリケーションが子でさえないにもかかわらず、至る所でesを使用するプロジェクトに取り組んでいますfork()が、マルチスレッドに大きく依存しています。

interprocess_mutexこれらすべてのesを、何も壊さずにプロセスローカルミューテックスに置き換えることができると想定するのは正しいですか?

これによりパフォーマンスが向上する可能性があるという私の仮定は(最小限の要因でのみ)正しいですか?

単一の(オプションでマルチスレッドの)プロセス内でプロセス間同期を使用する理由は考えられますか?

4

1 に答える 1

3

共有メモリまたはその他のIPCメカニズムを使用していますか?そのメモリは複数のアプリケーションで使用されていますか?それがテストです...

フォークする必要はありません。リソースを共有するさまざまなコードベース(個別の実行可能ファイル)が存在する可能性があります。たとえば、IPCメカニズムを介して実行されるアプリから統計情報を取得する監視アプリケーションまたはインターフェースはありますか?それを行う他のより良い方法があるかもしれないことに注意してください、それは単なる例です。

ヘッダーを見てください:

http://www.boost.org/doc/libs/1_52_0/boost/interprocess/sync/windows/mutex.hpp

http://www.boost.org/doc/libs/1_52_0/boost/interprocess/sync/posix/mutex.hpp

オーバーヘッドがあり、ローカルバージョン(安全な場合)に置き換えると、ある程度の効率が得られる可能性があります。しかし、正直なところ、私はPosixの実装にあまり精通していません。

上で述べたように、外部アプリが統計情報の取得や通信に共有メモリを使用している場合はIPCを使用する可能性がありますが、そうでない場合は、おそらくそれらを置き換えることができます。

于 2012-12-04T13:40:03.850 に答える