System V IPC
和 和有什么区别POSIX IPC
?- 为什么我们有两个标准?
- 如何决定使用哪些 IPC 功能?
4 回答
两者都有相同的基本工具——信号量、共享内存和消息队列。它们为这些工具提供了稍微不同的界面,但基本概念是相同的。一个显着的区别是 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 也会存在很多年。
如果您不知道更多关于您打算做什么,我们无法告诉您应该使用哪个,但是您在此处获得的答案应该为您提供足够的信息来自行决定。
System V IPC 较旧,而 POSIX IPC 较新。但是,在某些方面存在一些差异。Posix 并不总是优于 System V。
Posix 的信号量、队列和共享内存具有 Ascii 字符串名称,而在 System V 下,这些名称以整数形式给出。
如果进程终止(semop SEM_UNDO 标志),System V 信号量允许自动释放。Posix 没有这样的东西。
在 Linux 和 FreeBSD 上,posix 队列有很大的优势,因为 mq_open 给出的处理程序基本上是可以被轮询/epolled/selected/kqueued 的文件描述符。
- Systen V 和 POSIX IPC 是两个不同但相关的同一事物的实现。
“Unix System V,通常缩写为 SysV(通常发音为 - 尽管很少写成 - “系统五”),是 Unix 操作系统的第一个商业版本之一。它最初由美国电话电报 (AT&T) 和1983 年首次发布。”
-维基百科
“POSIX 或“Portable Operating System Interface [for Unix]”是 IEEE 指定的一系列相关标准的名称,用于定义应用程序编程接口 (API)”
-维基百科
Systm V 更早出现。POSIX 是从 IEEE 的标准化倡议演变而来的。
GNU/Linux
partially
与 POSIX 兼容。使用哪一个取决于您使用此 IPC 的操作系统。大多数供应商都在向POSIX
.
Richard Stevens 的 Unix Network Programming: Interprocess Communications v. 2很好地了解了这两个方面。