【问题标题】:RE: Posix and System V IPCRE:Posix 和 System V IPC
【发布时间】:2010-10-22 18:21:07
【问题描述】:
  1. 消息队列、共享内存和信号量中哪个 IPC 最容易转换为网络 IPC,哪个最难。

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

【问题讨论】:

    标签: ipc posix message-queue shared-memory semaphore


    【解决方案1】:

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

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

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

    【讨论】:

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

      【讨论】:

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

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

        【讨论】:

          【解决方案4】:

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

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

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

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

          【讨论】:

            猜你喜欢
            • 2011-06-02
            • 1970-01-01
            • 1970-01-01
            • 2017-03-08
            • 1970-01-01
            • 2012-03-13
            • 2016-10-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多