Tuple Space
Bag of tuples.
See
http://c2.com/cgi/wiki?TupleSpace &&
Rinda
An implementation of
AssociativeMemory? that provides a repository (mathematically a bag) for tuples, generatively.
- TupleSpace is a really shared memory because any process can reference any Tuple regardless of where that Tuple is stored.
- TupleSpace is a logically shared memory because it provides the appearance of a shared memory but does not require an underlying physical shared memory.
- TupleSpace is also an AssociativeMemory?, which means that tuples are accessed not by their address but rather by their content and type.
- The TupleSpace communication model is termed generative (see: GenerativeCommunication?) because a tuple generated by a process has an independent existence in TupleSpace. Any process may remove the tuple, and the tuple is bound to no process in particular.
Реализация TupleSpace в Rinda (версия ruby 1.8)
require 'rinda/tuplespace'
В файле определены следующие классы модуля Rinda:
- TupleEntry? - представляет один кортеж, вместе с временем устаревания (expiration time) и временем аннулирования (cancellation time).
- TemplateEntry? - шаблон с вместе с временем устаревания и временем аннулирования
- WaitTemplateEntry? - не документировано
- NotifyTemplateEntry? - уведомление, возвращается методом TupleSpace#notify. Является кортежем, состоящем из имени события и кортежа, с которым событие произошло
- TupleBag? - неупорядоченное хранилище кортежей, является основой для TupleSpace. Реализовано при помощи хеш-таблицы, в которой ключом является длина кортежа, а значением - массив кортежей данной длины.
- TupleSpace - пространство кортежей, управляющее доступом к хранимым в нём кортежам, в том числе заботится о блокировках и уведомлениях (notify). Реализуется на нескольких TupleBag? (для упрощения и ускорения механизма уведомлений)