是否有可能在同一台计算机上的两个不同的程序之间有一个共同的指针

我需要2个不同的程序来处理一组数据。 我可以在它们之间build立一个networking(UDP)连接,但我希望避免以任何方式传输整个数据。

这听起来有点荒谬,但有可能共享这两个程序之间的某种指针,以便当一个更新它时,另一个可以简单地得到指针,并开始使用它?

我正在使用Ubuntu 9.10

你在谈论IPC – 进程间通信。 有很多选择。

一个是内存映射文件。 它接近做你所描述的。 不过,这可能是也可能不是您要求的最佳方法。 阅读IPC获得一些深度。

您所寻找的内容通常称为“共享内存段”,您如何访问它是特定于平台的。

在POSIX(大多数Unix / Linux)系统上,您可以在sys / shm.h中使用shm _ *()API。

在Win32上,它使用内存映射文件完成,因此您将使用CreateFileMapping()/ MapViewOfFile()等

不知道有关Mac,但也可以使用shm _ *()。

共享内存可以提供任何形式IPC可用的最高带宽,但同时也是一种很难管理的方式 – 您需要同步访问共享内存,就像使用线程一样。 如果真的需要这个原始带宽,那么它就是最好的 – 但是需要这种带宽的设计通常是在进程间选择不好的情况下进行的,在这种情况下,获取它可能是不必要的工作得很好。

还要注意管道(比如一个例子)使用起来非常容易,而且带宽依然非常大 – 它们通常在内存中使用内核分配的缓冲区,但是它们会自动同步对它的访问。 带宽的损失是因为自动同步需要非常悲观的锁定算法。 尽管如此,这还是不会造成巨大的开销

Unix版本的POSIX共享内存函数。 IBM大型机(370 / xa / esa / Zos)可以使用较低级别的跨内存服务。 您还必须考虑您的应用程序是否可以扩展到单个处理器之外。

如果你确实需要这样做,这暗示你的两个程序可能真的变成了一个有两个线程的程序…(如果你有程序源代码,这是一个小菜单)。

也许在两个进程之间使用“memcached”作为代理可能会更好,那么每个进程都可以互相交换密钥。

我相信每个键/值对1024Kb或更少,但是直接的好处是互操作性,稳定性以及将多台机器上的多个进程连接在一起的未来能力。

不,对不起。 我很久以前就听说过一个实验操作系统,它具有非常大的地址空间,其中一部分在一台机器上,另一部分在其他机器上。 它会准确地让你问…

注:我假设2个程序运行在不同的机器上。 如果它们只是不同的进程,则可以使用命名节来共享数据。

抛开事实可以做的事情, 进程间的通信永远不会通过共享资源来完成 – 更不用说存储空间了 。 这是一个适当的配方灾难。

正确的IPC是通过适当的通信手段,如插座。 共享内存永远不可能。