Ruby 2.6.0 リファレンスマニュアル > ライブラリ一覧 > rinda/tuplespaceライブラリ > Rinda::TupleSpaceクラス

class Rinda::TupleSpace

クラス・モジュールの継承リスト: Rinda::TupleSpace < MonitorMixin < DRb::DRbUndumped < Object < Kernel < BasicObject

要約

Tuple Space を表すクラスです。

このクラスのインスタンスを drb を経由して公開することでタプルスペースを他のプロセスからアクセスさせることができるようになります。

タプルスペースを drb 経由で利用する側は DRb::DRbObject.new_with_uri などでこのオブジェクトのリモートオブジェクトを取得し、Rinda::TupleSpaceProxy をかぶせることで利用します。

タプルの寿命と renewer

タプルを Rinda::TupleSpace#write などで追加するときにその寿命を秒数で指定することができます。タプルをタプルスペースに追加してからその秒数過ぎるとタプルは削除されます。

ただし、指定秒数を過ぎてもすぐには削除されず、Rinda::TupleSpace.new の引数で指定した秒数ごとに「掃除用スレッド」が動き、それによって cancel されたタプルや期限切れになったタプルが削除されます。

sec には秒数の代わりに renewer を指定することもできます。これは renew という名前を持つオブジェクトで、上で説明した掃除用スレッドによって renew メソッドが呼び出されます。renew が 正の秒数を返した場合、有効期限がその秒数に更新されます。ただし、renew はタプルの有効期限が切れていない場合のみ呼び出されます(有効期限切れのタプルは削除されます)。

Rinda::SimpleRenewer はシンプルな renewer で renewer のサンプル実装でもあります。このクラスはデフォルトで寿命を180秒後に変更します。つまりこのクラスのインスタンスを renewer に指定すると無限に renew され続けるように思われますが、そうではありません。このクラスは DRb::DRbUndumped を include しているので、オブジェクトが生成されたプロセスが止まるとそのオブジェクトは無効になります。その時点でrenewの呼び出しに失敗するようになるので、そこからしばらく(数分)するとそのタプルは有効期限切れとなります。

特異メソッド

定義 説明
new(period = 60) -> Rinda::TupleSpace

Rinda::TupleSpace オブジェクトを生成します。

インスタンスメソッド

定義 説明
notify(event, pattern, sec = nil) -> Rinda::NotifyTemplateEntry

event で指定した種類のイベントの監視を開始します。

read(tuple, sec=nil) -> [Array|Hash]

タプルスペース内の tuple にマッチするタプルを一つコピーして返します。

read_all(tuple) -> [Array|Hash]

タプルスペース内の tuple にマッチするタプルをすべてコピーして返します。

take(tuple, sec = nil) -> Array | Hash

tuple にマッチするタプルをタプルスペースから取り出して返します。

write(tuple, sec = nil) -> Rinda::TupleEntry

tuple をタプルスペースに加えます。 tuple を管理するための Rinda::TupleEntry オブジェクトを返します。

継承したメソッド

! != __id__ __send__ instance_eval instance_exec method_missing singleton_method_added singleton_method_removed singleton_method_undefined mon_enter mon_exit mon_locked? mon_owned? mon_synchronize mon_try_enter new_cond !~ <=> == === =~ _dump class clone define_singleton_method display enum_for eql? equal? extend freeze frozen? hash initialize initialize_copy inspect instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself marshal_dump marshal_load method methods nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods psych_to_yaml public_method public_methods public_send remove_instance_variable respond_to? respond_to_missing? send singleton_class singleton_method singleton_methods taint tainted? tap then to_a to_ary to_hash to_int to_io to_proc to_regexp to_s to_str trust untaint untrust untrusted? .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_ENGINE_VERSION ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE