17

パイプとメッセージ キューの違いは何ですか?

vxworks と unix の両方の観点から説明してください。

パイプは一方向だと思いますが、メッセージ キューはそうではありません。

しかし、パイプは内部でメッセージ キューを使用しないでください。では、なぜパイプは単方向であるのに、メッセージ キューはそうではないのでしょうか?

他に考えられる違いは何ですか (デザイン、使用法、またはその他の観点から)?

4

5 に答える 5

21

メッセージ キューは次のとおりです。

  • 一方向
  • エントリー数固定
  • 各エントリには最大サイズがあります
  • 作成時に割り当てられたすべてのキュー メモリ (エントリ数 * エントリ サイズ)
  • データグラムのような動作: エントリを読み取ると、キューから削除されます。データ全体を読み取らないと、残りは失われます。例: 20 バイトのメッセージを送信しますが、受信者は 10 バイトを読み取ります。残りの 10 バイトは失われます。
  • タスクは、msqQReceive を使用して単一のキューでのみ保留できます (代替 API を使用して変更する方法があります)
  • 送信時に、キューがいっぱいの場合は保留になります (そして NO_WAIT を実行しません)。
  • 受信時に、キューが空の場合は保留になります (そして NO_WAIT を実行しません)。
  • タイムアウトは受信と送信でサポートされています

パイプ

  • メッセージ キュー上のレイヤーです <--- 単方向!
  • 最大数の要素があり、各要素には最大サイズがあります
  • はストリーミング インターフェイスではありません。データグラムのセマンティクス、メッセージ キューを一覧表示するだけ
  • 読み取り時に、読み取るデータが存在するまで保留します
  • 書き込み時は、基になるメッセージ キューに空きができるまで保留します。
  • 選択機能を使用して複数のパイプを待機できます

今思いつくのはそんなところです。

于 2010-03-19T00:37:24.227 に答える
1

メッセージ キューとパイプの比較: - 1 つのメッセージ キューを使用して、両方向にデータを渡すことができます - メッセージを先入れ先出し方式で読み取る必要はありませんが、代わりに選択的に処理できます ソース: http://wwwを参照してください.cs.vsb.cz/grygarek/dosys/IPC.txt

于 2014-07-31T19:00:38.057 に答える
1

UNIXの IPC にもこの違いがありました。それらの違いは、メッセージキューとパイプは、最初に情報をパケットに保存/取得することであると述べています。パイプは文字ごとにそれを行いますが。

メッセージ キュー:

メッセージ キュー: パイプに似た匿名データ ストリームですが、情報をパケットで格納および取得します。

パイプ

パイプ: 標準入力と標準出力を介してインターフェースされ、文字単位で読み取られる双方向のデータ ストリーム

ここでもこの質問を見つけました: Pipe vs msg queue

于 2014-05-02T03:52:17.837 に答える
1

「VxWorks パイプは UNIX パイプとは大きく異なります」と vxWorks のドキュメントには書かれていますが、冗談ではありません。 これがマンページです。

Unix パイプと vxWorks パイプの唯一の類似点は、それらが IPC の形式であると言っても過言ではないようです。機能が異なり、API も異なり、実装も大きく異なります。

于 2010-03-20T04:01:17.667 に答える
-1

MQ にはカーネル永続性があり、複数のプロセスで開くことができます。

于 2010-03-18T14:48:57.893 に答える