80
Linda und JavaSpaces

Linda und JavaSpaces

  • Upload
    ghada

  • View
    64

  • Download
    0

Embed Size (px)

DESCRIPTION

Linda und JavaSpaces. Linda. Motivation / Einführung Parallele Kommunikationsstrukturen Beschränkungen Probleme. Linda. Motivation / Einführung Parallele Kommunikationsmuster Beschränkungen Probleme. Message Passing. Prozess. Prozess. send. send. send. rcv. rcv. Prozess. rcv. - PowerPoint PPT Presentation

Citation preview

Page 1: Linda und  JavaSpaces

Lindaund

JavaSpaces

Page 2: Linda und  JavaSpaces

Linda

Motivation / Einführung

Parallele Kommunikationsstrukturen

Beschränkungen Probleme

Page 3: Linda und  JavaSpaces

Linda

Motivation / Einführung

Parallele Kommunikationsmuster

Beschränkungen Probleme

Page 4: Linda und  JavaSpaces

Message Passing

Prozess

Prozess

Prozess

Prozess Prozess

send

send

send

rcv

rcv

rcv

send

send

sendrcv

rcvrcv

send

rcv

Page 5: Linda und  JavaSpaces

Message Passing

Prozess

Prozess

Prozess

Prozess Prozess

send

send

send

rcv

rcv

rcv

send

send

sendrcv

rcvrcv

send

?

Page 6: Linda und  JavaSpaces

Linda

wurde in den 80er Jahren von Prof. David Gelernter an der YaleUniversity entwickelt.

stellt ein alternatives Paradigma der parallelen Programmierung dar.

beruht auf dem Konzept des tuple-space …

Page 7: Linda und  JavaSpaces

tuple-space

zentraler Datenspeicher zur Kommunikation ähnlich schwarzem Brett Prozesse können Tupel erzeugen, Tupel

lesen und Tupel entfernen jeder Prozess hat vollen Zugriff auf den

tuple-space sämtliche Kommunikation läuft durch

erstellen und lesen der Tupel ab es gibt keine weiteren

Kommunikationsmechanismen wie z.B. Nachrichten

Page 8: Linda und  JavaSpaces

Linda

Satz sprachunabhängiger Kommunikationsoperationen zur Interaktion mit dem tuple-space.

4 Grundoperationen: in out rd eval

Page 9: Linda und  JavaSpaces

tuple-space - Operationen

out - Erzeugen eines Tupels

tuple-spaceProzess

out

Page 10: Linda und  JavaSpaces

tuple-space - Operationen

rd - Lesen eines Tupels

tuple-spaceProzess

rd

Page 11: Linda und  JavaSpaces

tuple-space - Operationen

in - konsumierendes Lesen eines Tupels

tuple-spaceProzess

in

Page 12: Linda und  JavaSpaces

Kommunikationsschema

tuple-space

Prozess

Prozess

Prozess

Prozess Prozess

in

out

rd

out

rd

Page 13: Linda und  JavaSpaces

Hello World

Prozess 1:out("Hello World!");

Prozess 2:in(? msg);printf("%s", msg);

Page 14: Linda und  JavaSpaces

Hello World

Prozess 1:out("Hello World!");

Prozess 2:in(? msg);printf("%s", msg);

tuple-space

Page 15: Linda und  JavaSpaces

Hello World

Prozess 1:out("Hello World!");

Prozess 2:in(? msg);printf("%s", msg);

tuple-space

Page 16: Linda und  JavaSpaces

in

Gesucht wird ein Tupel, dessen erste n Komponenten mit value1, …, valuen

übereinstimmen letzte n Komponenten mit den Typen von

var1, … varn übereinstimmen

Die Werte der letzten n Einträge werden in den Variablen var1, …, varn abgelegt.

Blockiert bis gesuchtes Tupel vorhanden

in(value1,…, valuen, ? var1, …, ? varn);

Page 17: Linda und  JavaSpaces

rdp, inp

Prädikatoperationen: rdp – inp:

versuchen spezifizierten Wert zu lesen, liefern 1 im Erfolgsfall, 0 sonst.

nicht blockierend

variierende Ausführungsgeschwindigkeiten der beteiligten Systeme Nichtdeterminismus

Page 18: Linda und  JavaSpaces

eval

eval – Erzeugung eines neuen Prozesses: verhält sich wie out, legt jedoch einen neuen

Prozess an um den Wert des einzufügenden Tupels zu berechnen.

out(x, f(x));

1. der Wert y von f(x) wird bestimmt

2. das Tupel (x, y) wird dem tuple-space hinzugefügt

3. die Anweisung kehrt zurück

eval(x, f(x));

1. es wird ein neuer Prozess p erzeugt

2. die Anweisung kehrt zurück3. p berechnet y und fügt das

Tupel (x, y) dem tuple-space hinzu

Page 19: Linda und  JavaSpaces

Linda

Motivation / Einführung

Parallele Kommunikationsmuster

Beschränkungen Probleme

Page 20: Linda und  JavaSpaces

Master-Worker Schema

Master:

for (int i = 2; i < MAX; i++) {out("task", i);

}

bool result;int number;for (int i = 0; i < MAX; i++) {

in("result", ? number,? result);

}

Worker:

int number;while (!done) {

in("task", ? number);if (is_prime(number)) {

out("result", number,TRUE);

}else {

out("result", number,FALSE);

}

TSMaster

Worker

Worker

Worker

Page 21: Linda und  JavaSpaces

Master-Worker Schema

TSMaster

Worker

Worker

Worker

Master:

for (int i = 2; i < MAX; i++) {out("task", i);

}

bool result;int number;for (int i = 0; i < MAX; i++) {

in("result", ? number,? result);

}

Worker:

int number;while (!done) {

in("task", ? number);if (is_prime(number)) {

out("result", number,TRUE);

}else {

out("result", number,FALSE);

}

Page 22: Linda und  JavaSpaces

Master-Worker Schema

TSMaster

Worker

Worker

Worker

Master:

for (int i = 2; i < MAX; i++) {out("task", i);

}

bool result;int number;for (int i = 0; i < MAX; i++) {

in("result", ? number,? result);

}

Worker:

int number;while (!done) {

in("task", ? number);if (is_prime(number)) {

out("result", number,TRUE);

}else {

out("result", number,FALSE);

}

Page 23: Linda und  JavaSpaces

Master-Worker Schema

TSMaster

Worker

Worker

Worker

Master:

for (int i = 2; i < MAX; i++) {out("task", i);

}

bool result;int number;for (int i = 0; i < MAX; i++) {

in("result", ? number,? result);

}

Worker:

int number;while (!done) {

in("task", ? number);if (is_prime(number)) {

out("result", number,TRUE);

}else {

out("result", number,FALSE);

}

Page 24: Linda und  JavaSpaces

Master-Worker Schema

TSMaster

Worker

Worker

Worker

Master:

for (int i = 2; i < MAX; i++) {out("task", i);

}

bool result;int number;for (int i = 0; i < MAX; i++) {

in("result", ? number,? result);

}

Worker:

int number;while (!done) {

in("task", ? number);if (is_prime(number)) {

out("result", number,TRUE);

}else {

out("result", number,FALSE);

}

Page 25: Linda und  JavaSpaces

Datenstrukturen

Pseudo-Datenstrukturen durch Nutzung von Bennenungsschemata:

out(1, firstelt)out(2, secondelt)

out(n, nthelt)

Vektor:

out(1, 1, elem11) … out(1, n, elem1n)out(2, 1, elem21) … out(2, n, elem2n)

out(n, 1, elemn1) … out(1, n, elemnn)

… …

Matrix:

Page 26: Linda und  JavaSpaces

Vektorberechnung

int lmain() {for (int i = 0; i < VEC_SIZE; i++) {

eval( i, combine(a[i], b[i]) );}

return 0;}

Prozess Datenelement

Datenelement = Tupel

1 eval-Anweisung pro Datenelement

1:1

Page 27: Linda und  JavaSpaces

Message Passing

Emulation von Kanälen im tuple-space: Queue-Struktur - FIFO Nummerierung der Nachrichten spezielle Tupel zur Verwaltung des aktuellen

Zählerstandes von Anfang und Ende der Queue

void send_msg(int msg) {int tail_index;in("my_channel", "tail", ? tail_index);out("my_channel", tail_index + 1, msg);out("my_channel", "tail", tail_index + 1);

}

Page 28: Linda und  JavaSpaces

Message Passing

void send_msg(int msg) {int tail_index;in("my_channel", "tail", ? tail_index);out("my_channel", tail_index + 1, msg);out("my_channel", "tail", tail_index + 1);

}

int rcv_msg() {int head_index;in("my_channel", "head", ? head_index);in("my_channel", head_index, ? msg);out("my_channel", "head", head_index + 1);

}

Page 29: Linda und  JavaSpaces

Entwurfstechnik

1. Erstelle paralleles Programm. Nutze Kommunikationstechnik (message passing, eval-Tupel, master-worker…), die sich intuitiv anbietet.

2. Transformiere Programm ggf. (Performance) hin zu effizienterem Muster.

Vorteil:Alle Programmtransformationen können innerhalb von Linda realisiert werden.

Page 30: Linda und  JavaSpaces

Linda

Motivation / Einführung

Parallele Kommunikationsmuster

Beschränkungen Probleme

Page 31: Linda und  JavaSpaces

Endloses Blockieren

rd, in blockieren u.U. endlos: es ist nicht möglich einen Timeout zu

spezifizieren testet man mittels der Prädikatoperationen

rdp und inp kommt es zum busy-waiting und man läuft Gefahr, das gewünschte Tupel zu verpassen

while ( !inp(t) ) {} while ( !inp(t) ) {sleep(some_time);

}

unnötig hohe Systembelastung erhöhte Gefahr des Verpassens

Page 32: Linda und  JavaSpaces

Black-Box Effekt

i.A. sehr schwierig Überblick über den Inhalt des tuple-space zu gewinnen

Wie können mehrere (alle) Tupel zu einer Suchanfrage gefunden werden?

TS

?

Page 33: Linda und  JavaSpaces

Black-Box Effekt

rd("search", ? value1);

rd("search", ? value2); ?TS

?

Page 34: Linda und  JavaSpaces

Black-Box Effekt

rd("search", ? value1);

rd("search", ? value2);

nicht korrekt!

aufgrund des Nichtdeterminismus kann zweimal das gleiche Tupel ausgewertet werden

TS

?

Page 35: Linda und  JavaSpaces

Black-Box Effekt

Lösung:1. alle relevanten Tupel konsumieren2. Tupel zurückschreiben

void read_all() {int counter = 0, value;int tuples[SIZE];

while ( inp("entry", ? value) ) {tuples[counter] = value;counter++;

}for (int i = 0; i < counter; i++) {

out("entry", tuples[i]);}

}

Page 36: Linda und  JavaSpaces

Black-Box Effekt

Lösung:1. alle relevanten Tupel konsumieren2. Tupel zurückschreiben

void read_all() {int counter = 0, value;int tuples[SIZE];

while ( inp("entry", ? value) ) {tuples[counter] = value;counter++;

}for (int i = 0; i < counter; i++) {

out("entry", tuples[i]);}

}

Page 37: Linda und  JavaSpaces

Black-Box Effekt

Lösung:1. alle relevanten Tupel konsumieren2. Tupel zurückschreiben

void read_all() {int counter = 0, value;int tuples[SIZE];

while ( inp("entry", ? value) ) {tuples[counter] = value;counter++;

}for (int i = 0; i < counter; i++) {

out("entry", tuples[i]);}

}

Page 38: Linda und  JavaSpaces

Black-Box Effekt

Problem:Was, wenn der tuple-space während des Auslesens modifiziert wird?

Page 39: Linda und  JavaSpaces

Black-Box Effekt

Lösung: wechselseitiger Ausschluss bei

Schreibzugriffen Nachbildung von Semaphorfunktionalität

in("write_mutex");…out("write_mutex");

P(write_mutex);…V(write_mutex);

Page 40: Linda und  JavaSpaces

Black-Box Effekt

Lösung: void read_all() {in("write_mutex");

int counter = 0, value;int tuples[SIZE];

while ( inp("entry", ? value) ) {tuples[counter] = value;counter++;

}

for (int i = 0; i < counter; i++) {out("entry", tuples[i]);

}

out("write_mutex");}

Page 41: Linda und  JavaSpaces

Aufstauung

nicht benötigte Tupel sammeln sich im TS an

Black-Box Effekt: schwer Übersicht zu behalten garbage collection mühsam

TS

Page 42: Linda und  JavaSpaces

Teilausfall

Verteilte Umgebung (LAN, Internet, etc.):

mit dem tuple-space verbundene Systeme können jederzeit ausfallen

aufgrund der Struktur des tuple-space Modells hat ein Prozess keine Kenntnis über andere aktive Prozesse

ein Ausfall wird nicht bemerkt

Page 43: Linda und  JavaSpaces

Teilausfall

TSMaster

Worker

Worker

Worker

Master:

for (int i = 0; i < MAX; i++) {out("task", i);

}

bool result;int number;for (int i = 0; i < MAX; i++) {

in("result", ? number,? result);

}

Worker:

int number;while (!done) {

in("task", ? number);if (is_prime(number)) {

out("result", number,TRUE);

}else {

out("result", number,FALSE);

}

Page 44: Linda und  JavaSpaces

Teilausfall

TSMaster

Worker

Worker

Worker

Master:

for (int i = 0; i < MAX; i++) {out("task", i);

}

bool result;int number;for (int i = 0; i < MAX; i++) {

in("result", ? number,? result);

}

Worker:

int number;while (!done) {

in("task", ? number);if (is_prime(number)) {

out("result", number,TRUE);

}else {

out("result", number,FALSE);

}

Page 45: Linda und  JavaSpaces

Teilausfall

TSMaster

Worker

Worker

Master:

for (int i = 0; i < MAX; i++) {out("task", i);

}

bool result;int number;for (int i = 0; i < MAX; i++) {

in("result", ? number,? result);

}

Worker:

int number;while (!done) {

in("task", ? number);if (is_prime(number)) {

out("result", number,TRUE);

}else {

out("result", number,FALSE);

}

Page 46: Linda und  JavaSpaces

Master-Worker Schema

TSMaster

Worker

Worker

Master:

for (int i = 0; i < MAX; i++) {out("task", i);

}

bool result;int number;for (int i = 0; i < MAX; i++) {

in("result", ? number,? result);

}

Worker:

int number;while (!done) {

in("task", ? number);if (is_prime(number)) {

out("result", number,TRUE);

}else {

out("result", number,FALSE);

}

Page 47: Linda und  JavaSpaces

Master-Worker Schema

TSMaster

Worker

Worker

Master:

for (int i = 0; i < MAX; i++) {out("task", i);

}

bool result;int number;for (int i = 0; i < MAX; i++) {

in("result", ? number,? result);

}

Worker:

int number;while (!done) {

in("task", ? number);if (is_prime(number) {

out("result", number,TRUE);

}else {

out("result", number,FALSE);

}

Page 48: Linda und  JavaSpaces

Zusammenfassung

Linda bietet ein klares Anweisungssystem zur Entwicklung paralleler Programme.

Eine Vielzahl an Kommunikationsmustern ist realisierbar.

Die Prozessgranularität ist kontrollierbar.

Prozesse sind schwach gekoppelt. Einsatz in verteilten Umgebungen Einige

Probleme im praktischen Einsatz.

Page 49: Linda und  JavaSpaces

JavaSpaces

Einführung

Adressierte Probleme

Weitere Möglichkeiten

Page 50: Linda und  JavaSpaces

JavaSpaces

Einführung

Adressierte Probleme

Weitere Möglichkeiten

Page 51: Linda und  JavaSpaces

JavaSpaces

von Sun Ende der 90er Jahre entwickelt.

keine Linda Implementierung im strengen Sinn

greift tuple-space Gedanken auf – transportiert diesen in die Welt der Objekte

Entwicklung im Rahmen von Jini

Page 52: Linda und  JavaSpaces

JavaSpaces

Transaktionen Leases (Lebenszeiten) mehrere spaces Objektorientierung – starke Typisierung

Erweiterung bzw. Modifikation der tuple-space Idee:

Page 53: Linda und  JavaSpaces

Entry

Einträge im tuple-space: TupelEinträge im (java)space: Objekte… die das Interface Entry implementieren.

import net.jini.core.entry.Entry;

public class Message implements Entry {

public String content;

public Message() {}

}

Page 54: Linda und  JavaSpaces

Grundoperationen

out - write in - take rd - read rdp - readIfExists inp - takeIfExists

Message msg = new Message();msg.content = "Hello World!";space.write(msg, null, Lease.FOREVER);

space

Prozess

Page 55: Linda und  JavaSpaces

Grundoperationen

out - write in - take rd - read rdp - readIfExists inp - takeIfExists

Message template = new Message();Message result;result = (Message)space.take(template, null, Long.MAX_VALUE);

space

Prozess

Page 56: Linda und  JavaSpaces

take und read

erhalten als Anfrage ein Objekt mit vorbelegten Feldern.

liefern einen Eintrag zurück, der vom Typ des übergebenen Objektes ist und dessen Felder die vorbelegten Werte aufweisen.

Classname template = new Classname();template.field = valuespace.take(template, null, Long.MAX_VALUE);

liefert einen Eintrag zurück, der vom Typ Classname ist und dessen Objektfeld field, den Wert value aufweist

Page 57: Linda und  JavaSpaces

JavaSpaces

Einführung

Adressierte Probleme

Weitere Möglichkeiten

Page 58: Linda und  JavaSpaces

spezifizierbare Wartezeiten

read und take können eine maximale Wartezeit übergeben bekommen

nach Ablauf dieser Wartezeit kehren sie erfolglos zurück

lösen Problem des "endlosen Blockierens"

space.read(template, null, 1000);

kehrt nach Ablauf von 1000 Millisekunden erfolglos zurück

Page 59: Linda und  JavaSpaces

Leases

ordnen einem Eintrag eine "Lebenszeit" zu, nach derer der betreffende Eintrag automatisch entfernt wird

werden beim Erstellen eines Eintrags angegeben

können u.U. erneuert werden

Page 60: Linda und  JavaSpaces

Leases

Es wird ein Lease von 1000 Millisekunden angefordert.

write liefert den tatsächlich erteilten Lease zurück.

der erteilte Lease kann durchaus kürzer als der angeforderte sein

Lease l = write(msg, null, 1000);

Page 61: Linda und  JavaSpaces

Transaktionen

fassen mehrere Aktionen zu einer atomaren Ausführungseinheit zusammen:entweder es werden alle zusammengefassten Aktionen ausgeführt – oder keine von ihnen

fällt ein teilnehmendes System während der Durchführung einer Transaktion aus, so wird der Effekt aller unter dieser Transaktion durchgeführten Änderungen rückgängig gemacht Lösung des Problems "Teilausfall"

Page 62: Linda und  JavaSpaces

Transaktionen

1. Arbeitsauftrag abholen

2. Ergebnis zurückschreiben

Master-Worker Schema mit Transaktionen:

1 Transaktion

Page 63: Linda und  JavaSpaces

Transaktionen

spaceMaster

Worker

Worker

Worker

Transaktions-manager

Page 64: Linda und  JavaSpaces

Transaktionen

spaceMaster

Worker

Worker

Worker

Transaktions-manager

Page 65: Linda und  JavaSpaces

Transaktionen

spaceMaster

Worker

Worker

Transaktions-manager

Page 66: Linda und  JavaSpaces

Transaktionen

spaceMaster

Worker

Worker

Transaktions-manager

Page 67: Linda und  JavaSpaces

Transaktionen

spaceMaster

Worker

Worker

Transaktions-manager

Page 68: Linda und  JavaSpaces

JavaSpaces

Einführung

Adressierte Probleme

Weitere Möglichkeiten

Page 69: Linda und  JavaSpaces

Mehrere spaces

Ein Prozess kann mit mehreren spaces verbunden sein.

Transaktionen können mehrere spaces umspannen.

bsplw. können Einträge so auf sichere Art und Weise zwischen zwei spaces verschoben werden.

space

Prozess

space

Page 70: Linda und  JavaSpaces

Verteilung ausführbarer Inhalte

take, read liefern bei einer Anfrage ein Objekt zurück, das vom Typ des übergebenen Anfrage-Objektes ist …

also insbesondere auch Objekte einer Unterklasse des Anfrage-Objektes

Was, wenn diese Unterklasse auf dem anfragenden System nicht vorhanden ist? sie wird mittels Java RMI auf das anfragende

System übertragen.

Page 71: Linda und  JavaSpaces

Verteilung ausführbarer Inhalte

space

Prozess

Prozess

SpecialMessage msg = new SpecialMessage();space.write(msg, null, Lease.FOREVER);

Message template = new Message();Message msg;msg = (Message)space.take(template, null,

timeout);

msg

… SpecialMessage extends Message …

Page 72: Linda und  JavaSpaces

Verteilung ausführbarer Inhalte

space

Prozess

Prozess

SpecialMessage msg = new SpecialMessage();space.write(msg, null, Lease.FOREVER);

Message template = new Message();Message msg;msg = (Message)space.take(template, null,

timeout);

msg

Page 73: Linda und  JavaSpaces

Verteilung ausführbarer Inhalte

space

Prozess

Prozess

SpecialMessage msg = new SpecialMessage();space.write(msg, null, Lease.FOREVER);

Message template = new Message();Message msg;msg = (Message)space.take(template, null,

timeout);

Class not known: SpecialMessage

Page 74: Linda und  JavaSpaces

Verteilung ausführbarer Inhalte

space

Prozess

Prozess

SpecialMessage msg = new SpecialMessage();space.write(msg, null, Lease.FOREVER);

Message template = new Message();Message msg;msg = (Message)space.take(template, null,

timeout);

SpecialMessage.class

Page 75: Linda und  JavaSpaces

Command Pattern

Master-Worker Pattern mit Verteilung ausführbarer Inhalte:

Art der durchgeführten Berechnung lässt sich nachträglich ändern.

Verteilung der Berechnungsroutinen via Java RMI.

Im Rahmen konventioneller Architektur: Änderung der Berechnung Änderung des Programmcodes aller Worker

Page 76: Linda und  JavaSpaces

Zusammenfassung

JavaSpaces führt die Ideen von Linda weiter.

Viele der innerhalb von Linda auftretenden Probleme werden gelöst Praxistauglichkeit des Systems in einer verteilten Umgebung

Bislang noch kein Durchbruch was die Akzeptanz im praktischen Einsatz anbelangt.

Page 77: Linda und  JavaSpaces

Literatur

[1] David Gelernter. Generative communication in Linda. ACM Trans. Program. Lang. Syst., 7(1):80–112, 1985. ISSN 0164-0925.

[2] Steven L. Halter. Javaspaces Example by Example. Prentice Hall PTR, Upper Saddle River, NJ, USA, 2001. ISBN 0-1306-1916-7.[3] Sanjay Mahapatra. Introducing javaspaces. Java Developer’s Journal, 5(9),

2000. URL http://jdj.sys-con.com/read/36482.htm.[4] Sun Microsystems. Le - Jini distributed leasing specification, . URL http://java.sun.com/products/jini/2.0.2/doc/specs/html/lease- spec.html#1034275.[5] Sun Microsystems. Java RMI specification, . URL http://java.sun.com/j2se/1.4.2/docs/guide/rmi/spec/rmiTOC.html.[6] Sun Microsystems. Java object serialization specification, . URL http://java.sun.com/j2se/1.4.2/docs/guide/serialization/spec/serialTOC.html.

Page 78: Linda und  JavaSpaces

Literatur

[7] Dave Sag. Jini as an enterprise solution. URL http://www.onjava.com/pub/a/onjava/2001/01/04/Jini_enterprise.html.

[8] Daniel H. Steinberg. Jini: Out of the bottle and into the box. URL http://www.onjava.com/pub/a/onjava/2004/12/29/jini.html.[9] Antony I. T. Rowstron und Alan Wood. Solving the linda multiple rd problem. In COORDINATION ’96: Proceedings of the First International Conference on Coordination Languages and Models, pages 357–367, London,UK, 1996. Springer-Verlag. ISBN 3-540-61052-9.[10]Gian Pietro Picco und Amy L. Murphy und Gruia-Catalin Roman. LIME: Linda meets mobility. In International Conference on Software Engineering, pages 368–377, 1999.[11]Nicholas Carriero und David Gelernter. Linda in context. Commun. ACM, 32(4):444–458, 1989. ISSN 0001-0782.[12] Nicholas Carriero und David Gelernter. How to write parallel programs: a

guide to the perplexed. ACM Comput. Surv., 21(3):323–357, 1989. ISSN 0360-0300.

Page 79: Linda und  JavaSpaces

Literatur

[13]Eric Freeman und Ken Arnold und Susanne Hupfer. JavaSpaces Principles, Patterns, and Practice. Addison-Wesley Longman Ltd., Essex, UK, 1999.

ISBN 0-2013-0955-6.[14]M. Chen und Y. Choo und J. Li. Crystal: from functional description to efficient parallel code. In Proceedings of the third conference on Hypercube concurrent computers and applications, pages 417–433, New York, NY, USA, 1988. ACM Press. ISBN 0-89791-278-0.[15]R. Loogen und Y. Ortega-Mallén und R. Peña-Marí. Parallel Functional Programming in Eden. Journal of Functional Programming, 15(3):431–475, 2005.[16]Gang Chen und Zhonghua Yang und Hao He und Kiah Mok Goh. Coordinating multiagents using javaspaces. In ICPADS, pages 63–68, 2002.[17] Jim Waldo. The Jini architecture for network-centric computing. Commun.

ACM, 42 (7):76–82, 1999. ISSN 0001-0782.[18] Manel Guerrero Zapata. Javaspaces: A distributed computing model. Technical report, Mobile Networks - Nokia Research Center, Itämerenkatu 11-13 FIN-00180 Helsinki, FINLAND.

Page 80: Linda und  JavaSpaces

Vortrag / Seminararbeit online

Seminararbeit:

http://www.informatik.uni-marburg.de/~heidtm/files/seminararbeit.pdf

Vortrag:

http://www.informatik.uni-marburg.de/~heidtm/files/vortrag.ppt