GNU/Linux >> Linux の 問題 >  >> Linux

Linux のメッセージ キューの短所は何ですか?

関数 msgctl()msgget()msgrcv() 、および msgsnd() 'System V IPC' メッセージ キュー関数です。それらはあなたのために働きますが、かなり重いです。これらは POSIX によって標準化されています。

POSIX は、より最新の関数セット mq_close() も提供します。 、 mq_getattr()mq_notify()mq_open()mq_receive()mq_send()mq_setattr() 、および mq_unlink() どちらがあなたにとってより良いかもしれません (富の恥)

ただし、いずれかがデフォルトでターゲット プラットフォームにインストールされているかどうかを確認する必要があります。特に組み込みシステムでは、デフォルトでは存在しないため、それらを構成したり、インストールしたりする必要がある場合があります (共有メモリとセマフォについても同じことが言えます)。

どちらのメッセージ機能セットの主な利点も、(おそらく) 事前にデバッグされているため、同時実行性の問題が既に解決されていることです。一方、共有メモリとセマフォを使用して自分でそれを行う場合は、多くの利点があります。同じレベルの機能を実現するために必要な作業の量。

したがって、可能な場合は (再) 使用してください。それがオプションである場合は、独自のメッセージ キュー システムを再発明するのではなく、2 つのメッセージ キュー システムのいずれかを使用してください。最終的にパフォーマンスのボトルネックなどがあることに気付いた場合は、独自の代替案を作成して調査できますが、それまでは 再利用してください!


System V メッセージ キュー (msg* システム コールによって操作されるもの) には、多くの奇妙な癖や落とし穴があります。新しいコードについては、UNIX ドメイン ソケットを使用することを強くお勧めします。

そうは言っても、共有メモリ スキームよりもメッセージ パッシング IPC を強くお勧めします。共有メモリは間違いを犯しやすく、壊滅的な間違いを犯す傾向があります。


メッセージ パッシングは、小さなデータ チャンクや、メッセージ キューがデータをコピーするため、不変性を維持する必要がある場合に最適です。

共有メモリ領域は、送受信時にデータをコピーせず、クリーンでないプログラミング モデルと引き換えに、より大きなデータ セットに対してより効率的になる可能性があります。


Linux
  1. Linux 上の Chrome - ブラウザーにクエリを実行して、開いているタブを確認します。

  2. Linux/UNIX の [新しいメールがあります] メッセージは何ですか?

  3. Linux カーネルで使用されるエントロピー ソースは何ですか?

  1. Linuxを持続可能なOSにする理由

  2. Linuxターミナルを使用して、コンピューターにあるファイルを確認します

  3. Linuxコミュニティが特別な理由は何ですか?

  1. LinuxとUnix:違いは何ですか?

  2. Linux –システムに搭載されているハードディスクを確認する方法は?

  3. Linux – Linuxカーネルで使用されているエントロピーソースは何ですか?