Ruby Web サーバーと C++ プロセスがホストされている Linux マシンがあります。両方のコンポーネントが同じデータベースで動作します。
データベース リクエストの繰り返しを避けるために、オブジェクト モデルを作成して維持したいと考えています。
1つのオブジェクトモデルを作成し、それをRubyサーバーとC++プロセス間で共有することは可能ですか? はいの場合、長所と短所は何ですか?
Ruby Web サーバーと C++ プロセスがホストされている Linux マシンがあります。両方のコンポーネントが同じデータベースで動作します。
データベース リクエストの繰り返しを避けるために、オブジェクト モデルを作成して維持したいと考えています。
1つのオブジェクトモデルを作成し、それをRubyサーバーとC++プロセス間で共有することは可能ですか? はいの場合、長所と短所は何ですか?
要するに; 別の任意のプロセスのメモリを読み取ることはできません。両方のプログラムを再コンパイルできる場合は、ptraceを使用してメモリ共有/IPCを実装できます。
ただし、 memcachedを調べることをお勧めします。デーモンとして(必要に応じてローカルで)実行され、あらゆる用途に使用できる非常に高速な名前と値のキャッシュを提供します。レールシステムで高価な計算の結果をキャッシュするために使用します。
プロセス間でメモリを共有したい場合は、POSIX Programmer's Manual で共有メモリ ( man shm.h
) とセマフォ ( ) を探してください。C++ と Ruby の間で生のman sem.h
メモリを共有できます。これは最も単純な方法ではありません。Rubyとの間でFFI を記述し、共有メモリ バッファー上に適切なプロトコルを実装する必要があります (同期用のセマフォを使用)。shm.h
sem.h
パイプ、ソケット、RPC、MQ、さらには DB などの他の IPC 機能を使用することもできますが、共有ではなくコピーになります。