posix - System V IPC 与 POSIX IPC

标签 posix ipc sysv

  1. System V IPCPOSIX IPC 之间有什么区别?
  2. 为什么我们有两个标准?
  3. 如何决定使用哪些 IPC 函数?

最佳答案

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

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

首先,POSIX IPC 的实现不太广泛。我为 POSIX IPC 编写了一个 Python 包装器和 its documentation lists what I know about POSIX IPC implementations on various platforms .

在该文档中列出的所有平台上,据我所知,Sys V IPC 已完全实现,而您可以看到 POSIX IPC 并未实现。

它们相对年龄的第二个含义是,POSIX IPC 是在 Sys V IPC 使用一段时间后设计的。因此,POSIX API 的设计者能够学习 Sys V API 的优点和缺点。因此 POSIX API 更简单 在我看来,更容易使用,我推荐它而不是 Sys V API。

我应该注意,我从未运行过任何性能测试来比较两者。我认为旧的 API (Sys V) 会有更多时间 进行性能调整,但这只是猜测,当然不能替代现实世界的测试。

至于为什么有两个标准——POSIX 创建了他们的标准,因为他们认为这是对 Sys V 标准的改进。但如果每个人都认为 POSIX IPC 更好,那么许多程序仍然使用 Sys V IPC,并且将它们全部移植到 POSIX IPC 需要数年时间。在实践中,这是不值得的,因此即使从明天开始所有新代码都使用 POSIX IPC,Sys V IPC 也会保留很多年。

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

关于posix - System V IPC 与 POSIX IPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4582968/

相关文章:

c - IPC 函数 shmat 的标志 SHM_RND 是什么意思?

c - C 编译器是否保证两个八字节字段结构将在 SysV x64 上作为 INTEGER 传递?

c - 我在 XV6 中终止进程 "A", "A"的子进程会发生什么

c++ - cygwin pthread_mutex_timedlock 代理

c - 编译-std=c90时,如何启用CYGWIN中<time.h>中的clock_gettime()声明?

c - wait(null) and wait(&status) C语言与状态

init.d - 基于 Spring Boot (Tomcat) 的应用程序作为守护进程 - 如何停止?

c - 在 c 中实现子 shell

c++ - Windows 通用应用程序和桌面应用程序之间的 IPC 通信 (Windows 10)

bash - 是否可以通过利用管道为 linux 制作类似于 OSX 服务的东西?