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

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

4

4 回答 4

1
  1. 到目前为止,我会说消息队列是基于您在消息队列上执行的操作与套接字操作的映射几乎相同。
  2. 可能同样困难,我建议您在 shm 之上实现一些对网络更友好的抽象......例如消息队列。即使有一些支持网络的实现,共享内存也不太适合网络,但我遇到的确实是泄漏的抽象。
于 2009-05-05T20:04:17.047 回答
1

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

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

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

于 2009-05-05T20:15:32.747 回答
0

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

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

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

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

于 2009-05-05T20:17:42.600 回答
0
  1. 信号量并不是真正的通信机制,它们用于同步。共享内存可以通过网络使用(分布式共享内存),但这很难实现。消息队列很容易,因为它们直接映射到网络套接字。

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

于 2009-05-05T20:21:05.197 回答