3

異なるプロセスがメッセージ キューを使用してプロセス間通信を実行できるようにするための実装と自動コード ジェネレーターを作成しました。

私の実装はプリミティブ データ型では正常に動作しますが、ユーザーが非 POD [Plain Old Datatypes] 型を渡したい場合は失敗します。

SO に関する人々の提案について、Boost Serialization と、それによって非 POD をシリアル化する方法について読みました。

質問 :

Q1. シリアライゼーション/デシリアライゼーションは、それ自体が IPC メカニズムと見なされますか、それとも他の実装と一緒に使用されますか? [つまり、シリアライゼーションを使用してメッセージ キューの実装を強化する必要がありますか?それとも、IPC メカニズム自体としてシリアライゼーションに移行する必要がありますか? ]

はいの場合、データをハードディスクに書き込み、そこから読み取る必要があるため、遅くはありませんか?

または、それは私の誤解であり、d-bus のようなすべての IPC は実際にデータをディスクに保存し、ファイル識別子を他のプロセスに渡して読み取ることができますか?

4

1 に答える 1

2

シリアライゼーション/デシリアライゼーションは、それ自体が IPC メカニズムではありません。異なるプロセス間で通信するには、パイプのようなものを使用する必要があります。そうは言っても、これらのパイプとの間でデータをシリアル化/非シリアル化することは間違いありません。

このような戦略を使用すると遅くなる可能性がありますが、そうであれば、シリアライゼーションとバッファリングが原因で遅くなります。パイプを使用している場合は、ディスクに書き込んでからディスクから読み取るのではなく、シリアル化されたバイトをメモリを介して渡すだけです。

少し前に、このようなパターンの実装を C# で書きました。実装のアイデアに興味がある場合は、ここにブログ投稿があります。

于 2013-03-11T07:23:59.553 に答える