0

我必须建立一个概念来使用共享内存或 tcp 套接字编程概念在两台计算机之间进行通信。我该怎么做?是否可以在客户端服务器架构中实现共享内存?我该怎么做?

4

6 回答 6

7

您无法使用共享内存在两台计算机之间进行通信,因为它们不共享内存。

您应该使用 TCP 套接字。

于 2009-04-22T18:35:18.617 回答
2

可以与具有共享内存的远程系统进行通信。 远程 DMA是较新的高性能网络接口控制器卡 (NIC) 的一项功能。

这是一篇评估10 Gb 以太网RDMA 性能的论文。我知道 infinaband 也可以 RDMA,其他可能。802.11 XXX出来了不是很好吗?无线 RDMA?:)

于 2009-05-29T09:53:43.617 回答
1

我认为您正在寻找的不是共享内存,而是更恰当地称为“反射内存”之类的东西。

使用反射内存块,网络上的每台计算机都拥有一块内存。每个块都以高速在所有计算机之间的总线上运行。每台计算机从所有其他计算机获取内存副本以供读取,但通常只能写入自己的内存。

因此,每台计算机都可以“看到”其他每台计算机的内存状态。通常,您会在工业控制系统中看到这种架构,将控制权分布在物理上独立的机器上,并希望近乎实时地查看整体状态。

至于构建一个系统,你可以从 UDP 数据包开始,这些数据包只会爆出本地计算机的状态,并让所有其他计算机读取该数据。

于 2009-04-22T18:48:55.057 回答
0

您可能想研究类似memcached的东西,一个分布式内存对象缓存系统。

当然,这仍然是通过 TCP 完成的。

于 2009-04-22T20:10:01.070 回答
0

尖刻的回答“你不能这样做,因为计算机不共享内存”是完全错误的。单台计算机中的处理器不共享内存,硬件和软件实现共享内存协议以提供共享内存的假象。

跨处理器的共享内存协议与跨计算机的共享内存协议非常相似,这是同样的问题。

搜索“分布式缓存”“元组空间”和“分布式共享内存”可能会提供一些思考。memcached是一个非常流行的开源产品,你可以看看。

编辑:关于“缓存一致性架构”的评论。每个处理器都有自己的本地内存缓存(例如 L1 缓存)。有一大堆“东西”恰好使这个“缓存连贯”,因此看起来每个处理器都在读取和写入共享内存空间。处理器绝对不会直接写入单个共享内存空间。对于跨计算机的共享内存,这个问题在概念上是相同的。

于 2009-04-22T19:11:21.757 回答
0

我推荐Beej 的网络编程指南

于 2009-05-29T10:02:24.427 回答