系统V IPC与POSIX IPC


83
  1. System V IPC和之间有什么区别POSIX IPC
  2. 为什么我们有两个标准?
  3. 如何确定要使用的IPC功能?

2
有一个原因导致我选择posix上的sysv消息队列。posix消息队列中不支持按mtype传递消息的可能性。我曾在博客关于它..
takladev

库尔特·沃尔Kurt Wall)第382页的标题为《Linux Programming Unleashed 2nd Edition》的书中,它说: 我不知道是否有人改进Linux以解决该问题,如果有人知道请告诉我。今天,我在Posix IPCSystem V IPC上也面临着类似的选择,我的方法是仔细了解将要使用哪种IPC原语,因为两者之间有优势。例如,一个过程可能突然死亡,那又会怎样呢?System V IPC is well known and commonly used, but the Linux implementation of it is badly broken.
eigenfield

Answers:


105

两者都有相同的基本工具-信号量,共享内存和消息队列。它们提供的界面与那些工具略有不同,但是基本概念相同。一个显着的差异是POSIX为Sys V提供的消息队列提供了一些通知功能。(请参阅mq_notify()。)

Sys V IPC已经存在了很长时间,这有一些实际意义-

首先,POSIX IPC的实施范围较广。我写了一个POSIX IPC的Python包装程序,其文档列出了我对各种平台上POSIX IPC实现的了解

在该文档中列出的所有平台上,Sys V IPC都是完全实现的AFAIK,而您可以看到POSIX IPC不是。

它们相对年龄的第二个含义是POSIX IPC是在Sys V IPC使用了一段时间之后才设计的。因此,POSIX API的设计者能够从Sys V API的优点和缺点中学习。结果,POSIX API变得更简单,更易于使用IMO,因此我建议在Sys V API上使用它。

我应该指出,我从未进行任何性能测试来比较两者。我认为较早的API(Sys V)应该有更多的时间进行性能调整,但这只是推测,当然不能替代真实的测试。

关于为什么有两个标准-POSIX创建了他们的标准,因为他们认为这是对Sys V标准的改进。但是,如果每个人都同意POSIX IPC更好,那么许多程序仍将使用Sys V IPC,将它们全部移植到POSIX IPC将花费数年时间。在实践中,这样做是不值得的,因此,即使到明天为止所有新代码都使用POSIX IPC,Sys V IPC也会存在很多年。

在不了解您打算做什么的情况下,我们无法告诉您应该使用哪个选项,但是您在此处获得的答案应该为您提供足够的信息,以便您自行决定。


2
手册页和其他文章无法突出显示一个重要区别,即sysv消息队列具有按mtype传递消息的概念(posix msgq缺少此概念)。在某些情况下,这可能是重要的设计元素,以我的经验为依据,事实证明,这是一个秀场止步。我有关于它的博客
takladev

根据OpenGroup的文档,从问题2开始,SysV IPC就成为SUS的一部分,从问题7开始就成为新接口。的确,在那里的时间更长了,但是两者都是SUS的一部分,因此两者都属于POSIX。
Hibou57

22
  1. 我相信主要区别在于,所有POSIX IPC都是线程安全的,而大多数SysV IPC都不是[ 1 ]。
  2. 由于Unix战争[ 2 ]。的单一UNIX规范(SUS) [ 3 ],也称为POSIX,创建标准化在基于Unix的系统接口。
  3. 您可能需要POSIX。完全取决于您的要求。

10

System V IPC较旧,POSIX IPC较新。但是,某些方面存在一些差异。Posix并非总是比System V更好。

  1. Posix的信号灯,队列和共享内存具有Ascii字符串名称,而在System V下,它们使用整数编号。

  2. 如果进程终止,则系统V信号灯可以自动释放(semop SEM_UNDO标志)。Posix没有这样的事情。

  3. 在Linux和FreeBSD上,posix队列有很大的优势,因为mq_open给出的处理程序基本上是文件描述符,可以对其进行轮询/轮询/选择/排队。


因此,选择似乎取决于将要使用的IPC原语的类型。在有些地方Posix很棒,但是在其他地方System V也很棒。如果进程突然终止,并且世界上没有任何API可以拦截此类事件,则IPC原语将悬而未决或由此而被检测到。Posix最好的情况有很多,而System V可以很好地解决其他问题。
eigenfield

-3
  • Systen V和POSIX IPC是同一事物的两个不同但相关的实现。

“ Unix System V,通常缩写为SysV(通常发音为-尽管很少写为“ System Five”,它是Unix操作系统的第一个商业版本之一。它最初是由美国电话电报公司(AT&T)和于1983年首次发布。”

-维基百科

“ POSIX或“便携式操作系统接口(用于Unix)”是由IEEE指定的一系列相关标准的名称,以定义应用程序编程接口(API)”

-维基百科

  • Systm V早在那儿。POSIX源自IEEE的标准化倡议。

  • GNU / Linuxpartially符合POSIX。使用哪一个取决于您使用此IPC的操作系统。大多数供应商都在朝着POSIX

理查德·史蒂文斯(Richard Stevens)撰写的Unix Network Programming:Interprocess Communications v.2很好地介绍了这两种方法。

Unix网络编程


5
您没有讨论问题中提到的有关进程间通信的任何内容。
Michael Rice
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.