System V IPC
とはどう違いPOSIX IPC
ますか?- なぜ 2 つの基準があるのですか?
- どの IPC 関数を使用するかを決定する方法は?
4 に答える
どちらも同じ基本ツール (セマフォ、共有メモリ、およびメッセージ キュー) を備えています。それらは、これらのツールに対してわずかに異なるインターフェイスを提供しますが、基本的な概念は同じです。注目すべき違いの 1 つは、POSIX は Sys V にはないメッセージ キューの通知機能を提供することです。( を参照してくださいmq_notify()
。)
Sys V IPC は以前から存在しており、いくつかの実用的な意味があります --
まず、POSIX IPC はあまり広く実装されていません。私は POSIX IPC 用の Python ラッパーを書きました。そのドキュメントには、さまざまなプラットフォームでの 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 は何年も存続することになります。
何をしようとしているのかをよく知らなければ、どちらを使うべきかはわかりませんが、ここにある回答から、自分で判断するのに十分な情報が得られるはずです。
System V IPC は古く、POSIX IPC は新しいです。ただし、いくつかの側面ではいくつかの違いがあります。必ずしも Posix が System V より優れているとは限りません。
Posix のセマフォ、キュー、および共有メモリには Ascii 文字列名がありますが、System V ではこれらは整数で与えられます。
System V セマフォでは、プロセスが終了した場合に自動的に解放できます (semop SEM_UNDO フラグ)。Posixにはそのようなものはありません。
Linux と FreeBSD では、mq_open によって指定されたハンドラーは基本的に、ポーリング/epolled/selected/kqueued できるファイル記述子であるため、posix キューの大きな利点があります。
- Systen V と POSIX IPC は 2 つの異なるものですが、同じものの関連する実装です。
「Unix System V は、一般に SysV と略されます (通常は「システム ファイブ」と発音されますが、めったに書かれません)、Unix オペレーティング システムの最初の商用バージョンの 1 つです。もともとは American Telephone & Telegraph (AT&T) によって開発され、 1983年に最初にリリースされました。」
-ウィキペディア
「POSIX または「ポータブル オペレーティング システム インターフェイス [Unix 用]」は、アプリケーション プログラミング インターフェイス (API) を定義するために IEEE によって指定された関連規格のファミリーの名前です」
-ウィキペディア
System V は以前からありました。POSIX は、IEEE による標準化イニシアチブから発展しました。
GNU/Linux は
partially
POSIX に準拠しています。どちらを使用するかは、この IPC を使用している OS によって異なります。ほとんどのベンダーは に向かっていPOSIX
ます。
Unix Network Programming: Interprocess Communications v. 2 by Richard Stevensでは、これらの両方について詳しく説明しています。