74

私は最近 Linux でメッセージ キュー (System V、しかし POSIX も問題ないはず) をいじっていますが、私のアプリケーションには完璧に思えますが、The Art of Unix Programming を読んだ後、それらが本当に良い選択であるかどうかはわかりません。 .

http://www.faqs.org/docs/artu/ch07s02.html#id2922148

System V IPC の上位のメッセージ パッシング レイヤーは、ほとんど使用されなくなりました。共有メモリとセマフォで構成される下位層には、相互排他ロックと、同じマシン上で実行されているプロセス間でのグローバル データ共有が必要な状況下でも重要なアプリケーションがあります。これらの System V 共有メモリ機能は POSIX 共有メモリ API に発展し、Linux、BSD、MacOS X、および Windows でサポートされましたが、従来の MacOS ではサポートされませんでした。

http://www.faqs.org/docs/artu/ch07s03.html#id2923376

System V IPC 機能は、Linux およびその他の最新の Unix に存在します。ただし、これらはレガシー機能であるため、頻繁に実行されることはありません。2003 年半ばの時点で、Linux バージョンにはまだバグがあることが知られています。それらを修正するのに十分なほど気にする人は誰もいないようです。

最近の Linux バージョンでも、System V メッセージ キューにはまだバグがありますか? 著者が POSIX メッセージ キューは問題ないと言っているのかどうかわかりません。

ソケットは、ほとんどすべて (?) で優先される IPC のようですが、ソケットなどを使用してメッセージ キューを実装するのが非常に簡単であることがわかりません。それとも私が複雑に考えすぎているのでしょうか?

組み込み Linux を使用していることが関連しているかどうかわかりません。

4

5 に答える 5

84

個人的に私はメッセージ キューがとても好きで、間違いなく unix の世界で最も活用されていない IPC だと思います。それらは高速で使いやすいです。

いくつかの考え:

  • これのいくつかは単なるファッションです。古いものは再び新しくなります。メッセージ キューに輝く do-dad を追加すると、来年の最新かつ最もホットなものになる可能性があります。タブのスレッドではなく個別のプロセスを使用している Google の Chrome を見てください。突然、1 つのタブがロックされてもブラウザ全体がダウンしないことに人々は興奮します。

  • 共有メモリには、He-man ハローのようなものがあります。マシンから最後のサイクルを絞り出さず、MQ の効率がわずかに低下する場合、あなたは「真の」プログラマーではありません。ほとんどのアプリではありませんが、多くの場合、それはまったくナンセンスですが、一度定着した考え方を壊すのは難しい場合があります.

  • MQ は、無制限のデータを扱うアプリケーションには適していません。パイプやソケットなどのストリーム指向のメカニズムは、そのために簡単に使用できます。

  • System V の変種は本当に支持されなくなりました。原則として、可能な場合は POSIX バージョンの IPC を使用してください。

于 2009-06-09T00:02:33.607 に答える
15

はい、一部のアプリケーションにはメッセージ キューが適していると思います。POSIX メッセージ キューは、より優れたインターフェイスを提供します。特に、キューに ID ではなく名前を付けることができます。これは、障害の診断に非常に役立ちます (どちらがどれであるかを簡単に確認できます)。

Linuxでは、posixメッセージキューをファイルシステムとしてマウントし、「ls」でそれらを表示し、「rm」でそれらを削除できます。これも非常に便利です(System Vは、扱いにくい「ipcs」および「ipcrm」コマンドに依存しています)

于 2009-06-09T07:02:22.540 に答える
12

ネットワーク経由でメッセージを配信するオプションを常に開いておきたいので、実際には POSIX メッセージ キューを使用していません。それを念頭に置いて、zeromqやAMQPを実装するもののような、より堅牢なメッセージ パッシング インターフェースを検討することもできます。

0mq の優れた点の 1 つは、マルチスレッド アプリで同じプロセス空間から使用すると、非常に高速なロックレス ゼロコピー メカニズムを使用することです。それでも、同じインターフェイスを使用して、ネットワーク経由でメッセージを渡すこともできます.

于 2009-06-08T22:45:29.893 に答える