RE:Posix 和 System V IPC

Posted

技术标签:

【中文标题】RE:Posix 和 System V IPC【英文标题】:RE: Posix and System V IPC 【发布时间】:2010-10-22 18:21:07 【问题描述】:

    消息队列、共享内存和信号量中哪个 IPC 最容易转换为网络 IPC,哪个最难。

    将 System V 共享内存转换为网络 IPC 或将 Posix 共享内存转换为网络 IPC 会更容易吗

【问题讨论】:

【参考方案1】:

正如亨利克·古斯塔夫森所说:

    消息队列是迄今为止最容易转换为网络的 IPC 机制。信号量不是为传送数据而设计的,共享内存通常需要信号量控制的访问(或等效机制)才能在单台机器上提供适当的控制,更不用说跨网络了。也就是说,System V 消息队列可能是使用最少的 IPC 机制。

    任何共享内存机制的转换几乎都同样困难。需要注意的关键点是,实际上您很少使用“仅共享内存”;还有其他同步工具也在使用中。

【讨论】:

【参考方案2】:
    到目前为止,我之所以说消息队列,是因为您在消息队列上执行的操作与套接字操作的映射几乎相同。 可能同样困难,我建议您在 shm 之上实现一些对网络更友好的抽象...例如消息队列。共享内存不太适合联网,尽管有一些支持网络的实现,但我遇到的确实是泄漏抽象。

【讨论】:

【参考方案3】:

    信号量并不是真正的通信机制,它们用于同步。共享内存可以通过网络(Distributed Shared Memory)使用,但这很难实现。消息队列很简单,因为它们直接映射到网络套接字。

    这可能是非常相似的难度;两个 API 相似,只是接口不同。

【讨论】:

【参考方案4】:

(1)。最简单的是消息队列,最难的是共享内存。

我认为这是因为消息队列只需要一个指向消息队列数据结构的指针,因为共享内存需要将共享内存附加到两个进程的进程地址空间,并且当两个进程都打开时分配共享内存很困难不同的机器。

(2)。将 Posix 共享内存转换为网络 IPC 比 System V 共享内存更容易。

我认为这是因为 Posix 支持基于内存和命名信号量,并且不需要内核干预,而 System V 需要操作系统干预。

【讨论】:

以上是关于RE:Posix 和 System V IPC的主要内容,如果未能解决你的问题,请参考以下文章

system v和posix的共享内存对比

IPC- Posix与system v

linux用的是posix还是system v

posix和system v 信号量哪个更快

UNIX 进程间通讯(IPC)概念(Posix,System V IPC)

System V信号量