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

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

有帮助吗?

解决方案

正如Henrik Gustafsson所说:

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

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

其他提示

  1. 到目前为止,我会说消息队列是基于您在消息队列上执行的操作与套接字操作的映射几乎相同。
  2. 可能同样难,我建议你在shm之上实现一些稍微更友好的网络抽象...比如消息队列。共享内存不太适合网络,即使它有一些支持网络的实现,但我遇到的那些实际上是漏洞抽象。
  1. 信号量不是真正的通信机制,它们用于同步。共享内存可以通过网络使用(分布式共享内存),但这很难实行。消息队列很容易,因为它们直接映射到网络套接字上。

  2. 这可能是非常相似的难度;这两个API都很相似,只是有不同的界面。

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top