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

Is it possible to share memory between ruby and C++

本文关键字:C++ 之间 共享 内存 ruby 是否      更新时间:2023-10-16

我有一台Linux机器,上面托管着Ruby Web服务器和C ++进程。这两个组件在同一个数据库上工作。

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

是否可以创建一个对象模型并在 ruby 服务器和 c++ 进程之间共享它。如果是,有什么利弊?

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

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

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

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