Пространство кортежей

Перейти к навигацииПерейти к поиску

Пространство кортежей (англ. tuple space) — реализация парадигмы ассоциативной памяти для параллельных/распределённых вычислений. Она предоставляет репозиторий кортежей с параллельным доступом. Например, можно представить группу процессоров, которые вычисляют данные и сохраняют их в пространство кортежей, и группу процессоров, которые ищут данные в пространстве по шаблону и используют их. Пространство кортежей можно рассматривать как разновидность распределённой памяти.

Пространства кортежей являются теоретической основой языка Linda.

Реализации пространств кортежей были разработаны для Java, Smalltalk, Ruby, TCL, Python, Lua, Лисп и Пролог.

JavaSpaces

JavaSpaces — служба, предоставляющая распределённый механизм обмена и координирования объектов Java. Она используется для сохранения состояния распределённой системы и реализации распределённых алгоритмов.

Пример использования

// An Entry class
public class SpaceEntry implements Entry
{
     public final String message = "Hello World!";
     public Integer count = 0;
 
     public String service() {
         count = count + 1;
         return message;
     }
 
     public String toString() {
         return "Count: " + count;
     }
}

// Hello World! server
public class Server
{
     public static void main(String[] args) throws Exception
     {
         SpaceEntry entry = new SpaceEntry();            // Create the Entry object
         JavaSpace space = (JavaSpace)space();           // Create an Object Space
         // Register and write the Entry into the Space
         space.write(entry, null, Lease.FOREVER);        
         // Pause for 10 seconds and then retrieve the Entry and check its state.
         Thread.sleep(10*1000);
         SpaceEntry e = space.read(new SpaceEntry(), null, Long.MAX_VALUE);
         System.out.println(e);
     }
}

// Client
public class Client
{
     public static void main(String[] args) throws Exception
     {
         JavaSpace space = (JavaSpace) space();
         SpaceEntry e = space.take(new SpaceEntry(), null, Long.MAX_VALUE);
         System.out.println(e.service());
         space.write(e, null, Lease.FOREVER);
     }
}

Ссылки