4

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

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

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

4

2 回答 2

3

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

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

于 2012-07-02T15:11:44.697 回答
2

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

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

于 2012-07-05T15:45:27.287 回答