我必须构建一个概念,使用共享内存或tcp套接字编程概念在两台计算机之间进行通信。我会怎么做呢?是否有可能在客户端服务器架构中实现共享内存?我该怎么做呢? ?
答案 0 :(得分:7)
您无法在使用共享内存的两台计算机之间进行通信,因为它们不共享内存。
您应该使用TCP套接字。
答案 1 :(得分:2)
您 CAN 与具有共享内存的远程系统进行通信。 远程DMA 是较新的高性能网络接口控制器卡(NIC)的一项功能)。
这是一篇评估10 Gb ethernet RDMA表现的论文。我知道infinaband也可以RDMA,其他可能。当802.11 XXX问世时,这不是很好吗?无线RDMA? :)
答案 2 :(得分:1)
我认为,而不是共享记忆,你正在寻找的东西更适合称为“反射记忆”。
使用反射内存块,网络上的每台计算机都拥有一块内存。每个街区都以极高的速度在所有计算机之间的公交车周围进行打击。每台计算机都从所有其他计算机上获取内存的副本以供读取,但通常只能写入自己的内存。
因此,每台计算机都可以“看到”每台其他计算机中的内存状态。通常,您会在工业控制系统中看到这种架构,它将控制分布在物理上独立的机器上,并希望近乎实时地查看整体状态。
至于构建一个系统,你可以从UDP数据包开始,它只会爆发本地计算机的状态,并让所有其他计算机读取该数据。
答案 3 :(得分:0)
讽刺的回答“你不能这样做,因为电脑不共享内存”是完全错误的。 单台计算机内的处理器不共享内存,硬件和软件实现共享内存协议,以提供共享内存的假象。
跨处理器的共享内存协议与计算机上的共享内存协议非常相似,这也是同样的问题。
搜索“分布式缓存”“元组空间”和"distributed shared memory"它可能会提供一些思考的食物。 memcached是一款非常受欢迎的开源产品,您可以查看。
编辑:关于“缓存一致架构”的评论。每个处理器都有自己的本地内存缓存(例如L1缓存)。有一大堆“东西”碰巧使这个“缓存连贯”,以便看起来每个处理器都在读取和写入共享内存空间。处理器绝对,积极地不直接写入单个共享内存空间。对于跨计算机的共享内存,问题在概念上是相同的。
答案 4 :(得分:0)
您可能希望查看memcached这样的分布式内存对象缓存系统。
当然,这仍然是通过TCP完成的。
答案 5 :(得分:0)