class DRb::DRbIdConv

[edit]

aliases: DRbIdConv

要約

オブジェクトと識別子を相互に変換するクラスです。

リモートオブジェクトは、URIと識別子で区別されます。リモートメソッド呼び出しは、リモートプロセスに識別子を送り、それを受け取ったプロセスでオブジェクトに変換することで実現されます。

このクラスはdRubyでデフォルトとして使われるのオブジェクト-識別子間の変換クラスです。この変換には ObjectSpace の機構が使われます。特に ObjectSpace.#_id2ref が使われています。これはリモートオブジェクトが有効なのはリモートプロセス内の対応オブジェクトが GC で回収されるまでであることを意味します。一方 GC アルゴリズムでのオブジェクトの到達性判定はローカルプロセス内でのみ行なわれる、という事実に注意する必要があります。これはリモートプロセスで参照されているオブジェクトがローカルプロセス内では参照が切れてしまい、GC されてしまう可能性があるということを意味します。つまりリモートに送るオブジェクトは適切にローカルからも参照を保持する必要があるということを意味します。一方リモート側から参照されなくなった場合にはローカル側できちんと GC されるためには、ローカル側で適切に参照を切る必要もあります。

別の仕組みとして、drb/timeridconv で提供されている DRb::TimerIdConv クラスがあります。これを使うと、リモートにオブジェクトの参照が送られてから一定時間の間は、ローカルプロセス側の DRb::TimerIdConv で参照を保持しておくので、参照管理の簡略化ができます。

目次

インスタンスメソッド

インスタンスメソッド

to_id(obj) -> Integer[permalink][rdoc][edit]

オブジェクトを識別子に変換します。

to_obj(ref) -> Object[permalink][rdoc][edit]

識別子をオブジェクトに変換します。