是否有可能在ruby和C ++之间共享内存

时间:2012-07-02 14:52:53

标签: c++ ruby memory-management object-model

我有一台linux机器,托管了ruby Web服务器和c ++进程。这两个组件都在同一个数据库上工作。

为了避免重复的数据库请求,我想制作和维护一个对象模型。

是否可以制作一个对象模型并在ruby服务器和c ++进程之间共享它。如果是,那有什么优点和缺点?

2 个答案:

答案 0 :(得分:3)

总之;你无法读取单独的任意进程的内存。如果您能够重新编译这两个程序,则可以使用ptrace实现内存共享/ IPC。

我会建议你研究一下memcached。它作为守护进程运行(如果您愿意,可以在本地运行)并提供非常快速的名称 - 值缓存,您可以将其用于任何事情。我们使用它来缓存轨道系统上昂贵计算的结果。

答案 1 :(得分:2)

如果您真的想在进程之间共享内存,请在POSIX程序员手册中查找共享内存(man shm.h)和信号量(man sem.h)。它允许您在C ++和Ruby之间共享原始内存。这不是最简单的方法 - 您需要在Ruby中将FFI写入shm.hsem.h,并在共享内存缓冲区上实现适当的协议(使用信号量进行同步)。

您还可以使用其他一些IPC工具,如管道,套接字,RPC,MQ甚至数据库,但它是复制而不是共享。