Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > drbライブラリ > DRb::DRbIdConvクラス
クラスの継承リスト: DRb::DRbIdConv
< Object
< Kernel
< BasicObject
aliases: DRbIdConv
オブジェクトと識別子を相互に変換するクラスです。
リモートオブジェクトは、URIと識別子で区別されます。 リモートメソッド呼び出しは、リモートプロセスに識別子を 送り、それを受け取ったプロセスでオブジェクトに変換することで実現されます。
このクラスはdRubyでデフォルトとして使われる のオブジェクト-識別子間の変換クラスです。 この変換には ObjectSpace の機構が使われます。特に ObjectSpace.#_id2ref が使われています。 これはリモートオブジェクト が有効なのはリモートプロセス内の対応オブジェクトが GC で回収されるまで であることを意味します。一方 GC アルゴリズムでのオブジェクトの到達性 判定はローカルプロセス内でのみ行なわれる、という事実に注意する必要があります。 これはリモートプロセスで参照されているオブジェクトがローカルプロセス内では 参照が切れてしまい、GC されてしまう可能性があるということを意味します。 つまりリモートに送るオブジェクトは適切にローカルからも参照を保持する必要がある ということを意味します。一方リモート側から参照されなくなった場合には ローカル側できちんと GC されるためには、ローカル側で適切に参照を切る 必要もあります。
別の仕組みとして、drb/timeridconv で提供されている DRb::TimerIdConv クラスがあります。これを使うと、リモートに オブジェクトの参照が送られてから一定時間の間は、ローカルプロセス側 の DRb::TimerIdConv で参照を保持しておくので、参照管理の 簡略化ができます。
to_id(obj) -> Integer
[permalink][rdoc]オブジェクトを識別子に変換します。
to_obj(ref) -> Object
[permalink][rdoc]識別子をオブジェクトに変換します。