我有一台linux机器,托管了ruby Web服务器和c ++进程。这两个组件都在同一个数据库上工作。
为了避免重复的数据库请求,我想制作和维护一个对象模型。
是否可以制作一个对象模型并在ruby服务器和c ++进程之间共享它。如果是,那有什么优点和缺点?
答案 0 :(得分:3)
总之;你无法读取单独的任意进程的内存。如果您能够重新编译这两个程序,则可以使用ptrace实现内存共享/ IPC。
我会建议你研究一下memcached。它作为守护进程运行(如果您愿意,可以在本地运行)并提供非常快速的名称 - 值缓存,您可以将其用于任何事情。我们使用它来缓存轨道系统上昂贵计算的结果。
答案 1 :(得分:2)
如果您真的想在进程之间共享内存,请在POSIX程序员手册中查找共享内存(man shm.h
)和信号量(man sem.h
)。它允许您在C ++和Ruby之间共享原始内存。这不是最简单的方法 - 您需要在Ruby中将FFI写入shm.h
和sem.h
,并在共享内存缓冲区上实现适当的协议(使用信号量进行同步)。
您还可以使用其他一些IPC工具,如管道,套接字,RPC,MQ甚至数据库,但它是复制而不是共享。