web-dev-qa-db-ja.com

System V IPC vs POSIX IPC

  1. System V IPCPOSIX IPCの違いは何ですか?
  2. なぜ2つの標準があるのですか?
  3. どのIPC関数を使用するかを決定する方法?
76
Meghasyam

どちらにも同じ基本ツールがあります-セマフォ、共有メモリ、メッセージキュー。それらはそれらのツールに対してわずかに異なるインターフェースを提供しますが、基本的な概念は同じです。重要な違いの1つは、POSIXにはSys Vにはないメッセージキュー用の通知機能がいくつかあることです。 (mq_notify()を参照してください。)

Sys V IPCは長い間使用されてきましたが、これにはいくつかの実用的な意味があります-

まず、POSIX IPCはあまり広く実装されていません。 POSIX PythonのIPCラッパーと さまざまなプラットフォームでのPOSIX IPC実装について知っていることの一覧 を作成しました。

そのドキュメントにリストされているすべてのプラットフォームで、Sys V IPCは完全に実装されていますが、POSIX IPCは実装されていません。

相対年齢の2番目の意味は、POSIX IPCがSys V IPCがしばらく使用された後に設計されたことです。したがって、POSIX APIの設計者は、Sys V APIの長所と短所から学ぶことができました。その結果、POSIX APIはIMOをより簡単かつ簡単に使用できるようになり、Sys V APIよりもお勧めします。

2つを比較するためにパフォーマンステストを実行したことがないことに注意してください。古いAPI(Sys V)のパフォーマンス調整にはもっと時間がかかると思いますが、それは単なる推測であり、もちろん実際のテストに代わるものではありません。

なぜ2つの標準があるのか​​について、POSIXはSys V標準の改善だと考えて標準を作成しました。しかし、誰もがPOSIX IPCの方が良いと同意した場合、多くの多くのプログラムがまだSys V IPCを使用しており、それらすべてをPOSIX IPCに移植するには数年かかります。実際には、努力する価値はないので、たとえすべての新しいコードがPOSIX IPCを使用したとしても、Sys V IPCは長年使用され続けます。

あなたが何をするつもりなのかをもっとよく知らない限り、どれを使うべきかはわかりませんが、ここにある答えはあなた自身で決めるのに十分な情報を与えるはずです。

97
  1. 主な違いは、すべてのPOSIX IPCはスレッドセーフですが、ほとんどのSysV IPCはNOT [ 1 ]です。
  2. Unix wars[ 2 ]のため。 Single UNIX仕様(SUS)[]、別名POSIXは、Unixベースのシステムでインターフェースを標準化するために作成されました。
  3. おそらくPOSIXが必要でしょう。要件のみに依存します。
19
jweyrich

System V IPCは古いバージョンであり、POSIX IPCは新しいバージョンです。ただし、いくつかの点でいくつかの違いがあります。PosixがSystem Vより優れているとは限りません。

  1. Posixのセマフォ、キュー、共有メモリにはAscii文字列名がありますが、System Vではこれらは整数で指定されます。

  2. System Vセマフォを使用すると、プロセスが終了すると自動的に解放されます(semop SEM_UNDOフラグ)。 Posixにはそのようなことはありません。

  3. LinuxおよびFreeBSDでは、mq_openによって提供されるハンドラーは基本的にポーリング/ epolled/selected/kqueuedできるファイル記述子であるため、posixキューの大きな利点があります。

5
Madars Vi