System V IPC与POSIX IPC

Meg*_*am 78 posix ipc sysv

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

小智 99

两者都有相同的基本工具 - 信号量,共享内存和消息队列.它们为这些工具提供了略微不同的界面,但基本概念是相同的.一个值得注意的区别是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也会坚持多年.

我们不能告诉你哪些你应该使用而不知道你打算做什么,但你在这里得到的答案应该给你足够的信息来自己决定.

  • 手册页和其他文章未能突出显示一个重要区别,即 sysv 消息队列具有通过 mtype 传递消息的概念(posix msgq 缺少此概念)。在某些情况下,这可能是一个重要的设计元素,并引用我的经验,结果证明它是一个表演障碍。我已经 [博客](https://nyrahul.github.io/systems/engg/2018/04/01/sysv-msgq-vs-posix-msgq/) 关于它。 (2认同)

jwe*_*ich 20

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


Mad*_* Vi 6

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

  1. Posix的信号量,队列和共享内存具有Ascii字符串名称,而在System V下,这些名称以整数给出.

  2. 如果进程死亡(semop SEM_UNDO标志),System V信号量允许自动释放.Posix没有这样的东西.

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