Referat zum Seminar:
-
Objekt-Orientierte Parallele Programmierung
Thema:
-
Objekt-Orientierte Linda-Modelle
-
Inwieweit kann das Linda-Modell zur parallelen
Programmierung im Kontext objekt-orientierter
Systeme eingesetzt werden?
Datum:
Inhaltsverzeichnis:
- Einleitung
- Erklärung des Linda-Modells
- Tupel-Raum
- Primitiven
- Tupel-Typen
- Matching
- Linda Implementierungen
- Erweiterungen des Modells bei objekt-orientierten Sprachen
- Objekt-Orientierung bei Tupeln und Tupel-Räumen
- Kommunikation
- Orthogonalität von Sender und Empfänger
- Kommunikatiionsprimitiven
- mehrere Tupel-Räume
- Beispiel: Das Philosophen Problem
- Tupel-Raum Manager
- Matching-Erweiterungen
- Vererbung und Wiederverwendung
- Schlußbemerkung
- Literaturverzeichnis
1. Einleitung
Zuerst soll allgemein das Linda-Modell vorgestellt und dessen Bestandteile erklärt werden.
Danach folgt ein Überblick über die verschiedenen Linda Implementierungen, Erweiterungen
des Modells und eine Betrachtung des Modells unter dem objekt-orientierten Gesichtspunkt.
Bei parallel ablaufenden Programmen löst man ein Problem im allgemeinen durch Zerlegen des
Problems in kleine Teile, welche dann auf die vorhanden Ressourcen verteilt werden und jeweils
für sich gelöst bzw. berechnet werden. Am Schluß werden die einzelnen Teile bzw. die
Teillösungen wieder zusammengefügt und somit eine Gesamtlösung des Problems erstellt.
Um aber dieses Aufteilen und Zusammenfügen auf der programmiersprachlichen Ebene koordinieren
zu können, benötigt man entsprechende Konstrukte bzw. Primitiven. Das heißt als Programmierer
muß man in der Lage sein können, mehrere Threads zu erzeugen, sowie diese
auch zu koordinieren.
An diesem Punkt kommt das Linda-Modell ins Spiel.
2. Erklärung des Linda-Modells
Vorgestellt wurde das Modell vor einigen Jahren von David Gelernter.
Linda ist ein Modell bzw. ein Paradigma zur parallelen Programmierung, welches eine Semantik
zur Koordination und Kommunikation zwischen mehreren Prozessen anbietet. Dabei wird nicht
betrachtet, wie einzelne Teile eines Problems berechnet werden, sondern man betrachtet nur
die Erzeugung von Prozessen und deren Koordination.
Ein paralleles Programm läßt sich immer in zwei Teile aufteilen. Einerseits die Berechnung und
andererseits deren Kommunikation. Die Koordinationsprimitiven werden, wie schon gesagt,
durch das Linda-Modell beschrieben. Die Berechnung hingegen wird durch die Gast-Sprache,
in welche das Modell eingebettet wird, ermöglicht.
Insbesondere ist Linda also kein Werkzeug, sondern wie schon gesagt ein Modell und kann
somit in vielen verschiedenen Formen implementiert bzw. realisiert werden.
2.1 Tupel-Raum
Linda besteht aus wenigen einfachen Operationen, welche den Tupel-Raum charakterisieren.
Alle Prozesse können über den Tupel-Raum auf die gleichen Daten oder Nachrichten zugreifen.
Der Tupel Raum stellt somit den gemeinsamen Speicher dar.
Realisiert wird der Tupel-Raum im allgemeinen mittels Shared Memory bzw. Distributed
Shared Memory Konzepten oder aber auch durch Message Passing.
Beim Message Passing werden Datenobjekte zwischen den einzelnen Prozessen hin- und
hergeschickt, während beim Shared Memory Konzept die Prozesse direkt auf die gleichen
Datenobjekte zugreifen.
2.2 Primitiven
Linda bzw. Implementierungen von Linda umfassen mindestens die vier grundlegenden
Operationen out , in , read und eval .
- out(t):
- Fügt das Tupel t zum Tupel-Raum hinzu.
Der aufrufende Prozeß läuft danach sofort weiter.
Beispiel: out("Linda", 13, 9.99)
- in(s):
- Ein Tupel t , welches zum Template (Anti-Tupel) s paßt wird aus dem
Tupel-Raum entfernt und an den aufrufenden Prozeß übergeben.
Der Prozeß wird solange blockiert, bis ein entsprechendes Tupel gefunden wird.
Beispiele: in("Linda", 13, 9.99), in("Linda", ?i, ?f) (siehe hierzu Kapitel 2.4)
- read(s):
- Entspricht in(s) ; allerdings bleibt das Tupel im Tupel-Raum, es wird
nur eine Kopie des Tupels zurückgegeben.
Der aufrufende Prozeß blockiert, bis ein entsprechendes Tupel gefunden wird.
Beispiel: read("Linda", ?i, 9.99)
- eval(t):
- Gleiche Funktionsweise wie out(t) ; allerdings werden die einzelnen Elemente
(Felder) vom Tupel t erst nach Einfügen in den Tupel-Raum ausgewertet,
wobei implizit für das Auswerten eines Elements jeweils ein neuer Prozeß
erzeugt wird. Je nach Implementierung kann dies
entweder lokal oder auch entfernt geschehen.
Zugreifen können andere Prozesse erst auf dieses Tupel, wenn die
Auswertungen abgeschlossen sind und das Tupel dadurch passiv geworden ist.
Beispiel: eval("Linda", sqrt(169), 9.99)
Diese vier genannten Operationen sind in jeder Linda-Implementierung zu finden. Zusätzlich
finden sich in den meisten Implementierungen noch die Operationen inp und readp , welche
die Prädikatversionen von in bzw. read darstellen.
- inp(s):
- Entsprechend in(s) ; nur wird hierbei der aufrufende Prozeß nicht
blockiert, falls kein entsprechendes Tupel s zum Zeitpunkt des Aufrufs gefunden wird.
Stattdessen wird false (bzw. "0") zurückgegeben.
- readp(t):
- Entsprechend read(t) . Genau wie bei inp(s) wird der Prozeß nicht
blockiert, sondern false (bzw. "0") zurückgegeben, falls kein passendes
Tupel t gefunden werden konnte.
Obwohl die Prädikatversionen vom ursprünglichen Linda-Modell propagiert werden, findet
man diese Operationen nicht in allen Implementierungen von Linda.
Es gibt auch Ansätze inp und readp , durch eine einzige neue Operationen zu ersetzen.
Ein Beispiel hierfür ist die die collect -Primitive (siehe "Global Synchronisation in Linda ").
Collect setzt die Verwendung von mehreren Tupel-Räumen voraus (siehe Kapitel 4.1), wo-
bei jeweils alle Tupel, welche zum gegebenen Template passen, in einen Ziel-Tupel-Raum
verschoben werden. Die Anzahl der verschobenen Tupel wird dabei zurückgegeben.
2.3 Tupel-Typen
Tupel sind im allgemeinen von passiver Natur, z.B. wenn ein Tupel mit out(t) in den
Tupel-Raum eingefügt wird, handelt es sich um ein passives Datum. Bei der eval Operation
wird das Tupel jedoch erst passiv, wenn nach dem Einfügen in den Tupel-Raum alle
Elemente ausgewertet worden sind. Erst dann kann es von einem anderen Prozeß angesprochen
bzw. angefordert werden. Solange noch die Auswertungsprozesse ausgeführt werden,
handelt es sich um ein aktives Tupel. Gerade hier liegt die Besonderheit von eval , da diese
Funktion somit zum Erzeugen von Threads bzw. Prozessen dient.
Ein Konstrukt um beispielsweise n Arbeiter-Prozesse zu erzeugen, würde in C/C++ Linda
folgendermaßen aussehen:
for (i = 0; i < n; ++i)
eval("Arbeiter", i, work());
Hierbei würden also implizit n neue Prozesse erzeugt und abgearbeitet.
2.4 Matching
Wie schon angesprochen, können mit den Operationen in bzw. read bestimmte Tupel angefordert werden.
Ein Tupel aus dem Tupel Raum wird als passend zu einem Template, also der
Tupel-Beschreibung einer in bzw. read Operation, angesehen, wenn bestimmte Bedingungen
bezüglich der Elemente des Templates bzw. Tupels erfüllt sind.
Hierbei werden zwei Arten von Feldern unterschieden. Dies sind einerseits actual Felder
und andererseits formal Felder. Felder mit expliziten Werten sind actual . Formal
Felder hingegen sind eine Art Wildcard für alle Werte des entsprechendes Typs.
Eine dieser Bedingungen ist nun die gleiche Feldanzahl von Template und Tupel. Weiterhin
müssen die Felder jeweils den gleiche Typ haben, wobei allerdings nicht beide Felder formal
sein dürfen.
Sind beide Felder actual müssen natürlich auch die jeweiligen Werte identisch sein.
Bei objekt-orientierter Betrachtung ergeben sich noch zusätzliche Matching-Regeln,
siehe hierzu Kapitel 4.6.
3. Linda Implementierungen
Das Linda-Modell bzw. die Operationen lassen sich in nahezu jede Programmiersprache
einbetten. Beispiele hierfür sind C bzw. C++, Eiffel, Smalltalk, Lisp, Simula, Prolog,
Fortran, Pascal, Modula-2 oder sogar Postscript.
Bei einigen Sprachen sind Modifikationen am Compiler bzw. Runtime-System notwendig um
eine Linda-Variante der Sprache zu erstellen. Je nach Sprache kann dies jedoch auch durch
hinzufügen einer neuen Bibliothek erreicht werden. Bei Eiffel-Linda beispielsweise, wurde nur
eine neue Klasse mit den genannten Operationen erstellt, welche benutzt werden kann um in
Eiffel-Linda parallel ablaufende Programme schreiben zu können.
Mit dem Linda-Modell erweitert man ein Sprache zwar zu einer neuen parallelen Variante
dieser Sprache, allerdings bietet Linda keine Möglichkeit zur Kontrolle der Auslastung der
Ressourcen des Systems. D.h. es ist nicht möglich, explizit Ressourcen für bestimmte
Programmteile bzw. Prozesse zu definieren. Allerdings ist dies ist sowieso ein allgemeines
Problem bei paralleler Programmierung bzw. parallelen Abläufen.
Bezüglich der verwendeten Hardware läßt sich Linda natürlich an viele verschiedene Systeme
anpassen, seien es nun Transputer, Mehrprozessorrechner (Hypercubes) oder vernetzte
Workstations.
4. Erweiterungen des Modells bei objekt-orientierten Sprachen
In den einzelnen Implementierungen findet man allerdings nicht unbedingt immer nur das
grundlegende Linda-Modell, sondern Varianten des Modells. Modifikationen oder
Erweiterungen werden vorgenommen, um Ineffizienzen oder Probleme des ursprünglichen Modells zu
beheben bzw. zu verringern. Betrachtete Aspekte sind hier vorwiegend Modifikationen von
Linda-Primitiven, wie z.B. die schon erwähnte collect -Primitive, die Möglichkeit mit mehreren
Tupel-Räumen zu arbeiten, Tupel-Raum-Manager, neue Kommunikationsprimitiven, Verbesserung
von objekt-orientierten Linda-Varianten.
Die Verwendung des ursprünglichen Linda-Modells, insbesondere bezüglich der
Tupel-Raum-Kommunikation, weist Unzulänglichkeiten auf, wenn es in eine objekt-orientierte
Sprache eingebettet wird. Möglichkeiten diese Unzulänglichkeiten zu lösen, werden von
Matsuoka und Kawai in ihrer Veröffentlichung "Using Tuple Space Communication in
Distributed Object-Oriented Languages " vorgestellt, welche im Folgenden (Kapitel 4.1-4.4)
genauer betrachtet werden sollen.
4.1 Objekt-Orientierung von Tupeln und Tupel-Räumen
Bei der Tupel-Raum-Kommunikation kommunizieren die Objekte mittels Tupeln, also liegt es
nahe auch die Tupel als Objekte zu betrachten. Die Funktionalität der Tupel kann somit in
gleicher Weise wie bei anderen Objekten im System definiert werden. Hieraus ergeben sich
einige Vorteile; zum einen kann ein Objekt dann Nachrichten entgegennehmen, auch wenn
es zu dem Zeitpunkt des Nachrichtenempfangs noch nicht die Fähigkeit hat, diese zu
verstehen. Hieraus resultiert eine Zeit-Unabhängigkeit bei der Nachrichtenverarbeitung, d.h. ein
Objekt kann Nachrichten entgegennehmen und erst später, wenn es in der Lage ist diese zu
verstehen, weiterverarbeiten. Die dynamische Veränderung der Handlungsweise eines
Objekt ist hierbei von Bedeutung.
Weiterhin ist eine transparente Übertragung von Nachrichten möglich. Ein Objekt kann also
Nachrichten weiterleiten, ohne volles Wissen über den Inhalt bzw. die Bestandteile der
Nachricht haben zu müssen (transparent delegation ).
Durch die Betrachtung von Tupel-Räumen als Objekte ergibt sich weiter die Möglichkeit,
diese dann als Elemente eines Tupels zu benutzen (-> Tupel-Räume als first-class Objekte).
Garbage Collection von Tupeln und Tupel-Räumen ist auch möglich. Hierdurch kann dann
ein Tupel bzw. Tupel-Raum welcher schon einmal bei einer bestimmten Kommunikation
benutzt wurde bei einer anderen Kommunikaiton wieder benutzt werden.
4.2 Kommunikation
4.2.1 Orthogonalität von Sender und Empfänger
Im Originalmodell erzeugt ein Sender beispielsweise ein Tupel durch Angabe der
Tupel-Spezifikationen in einer out -Operation, ein Empfänger hingegen gibt ein Template
mit den gesuchten Tupeln bzw. deren Spezifikationen in einer in - oder read -Operation an.
Hierbei ist eine Orthogonalität zwischen Sender und Empfänger nicht mehr gegeben, da
der Sender das Tupel nur implizit erzeugt. Ein Sender kann das Tupel an andere
weiterleiten, welche die Spezifikationen des Tupels nicht kennen müssen um es
weiterzuverarbeiten. Auf der Empfängerseite hingegen müßten die Spezifikationen allen
Empfänger bekannt sein, was nicht vernünftig realisierbar ist.
Um diese Unzulänglichkeit des ursprünglichen Modells zu beheben, wird das Modell in
der Weise modifiziert, daß sowohl Sender als auch Empfänger Tupel in den Tuple-Raum
einfügen, wobei zwischen Sender-Tupeln und Empfänger-Tupeln unterschieden wird.
Matching geschied duch gegenseitige Überprüfung der Tupel auf Gleichheit. Ein
passendes Tupel wird dann an den Empfänger zurückgegeben und kann somit unter den
Empfängern verteilt werden.
4.2.2 Kommunikationsprimitiven
Bei der Benutzung von Tupel-Raum Mangern (siehe Kapitel 4.7), werden die Vorteile der
Othogonalität deutlich.
Bei Verwendung des Originalmodells könnten Arbeiter nur mit dem Manager
kommunizieren, also nur indirekt mit dem Auftraggeber. Hierdurch ergibt sich somit eine
hierarchische Struktur, welche allerdings je nach Anwendungsfall restriktiv ist und somit
nicht unbedingt die effizienteste Möglichkeit darstellt.
Aber eben diese Art der Kommunikation ergibt sich, wenn man das Linda-Modell ganz
naiv in eine objektorientierte Sprache einbettet, da hier oft die Methode des Message
Passing zur Kommunikation benutzt wird. Beim Message Passing kann man normalweise
eine Nachricht nur an ein explizites Ziel schicken (1 zu 1 Kardinalität), eine Art
Broadcasting ist also nicht direkt möglich. Der Manager muß also jeden Arbeiter einzeln
ansprechen, dies setzt natürlich auch voraus, daß er auch alle Arbeiter kennt. Es muß
dann also auch sichergestellt werden, daß ein neuer Arbeiter bzw. der Ausfall eines
Arbeiters dem Tupel-Raum-Manager bekannt gemacht wird.
Beim alten Modell ist man nicht flexibel genug um auf natürliche Weise komplexe
Interaktionen zwischen Objekten ausdrücken zu können.
Bessere Kommunikationsprimitiven sind also nötig. Eine effektivere Form der
Kommunikation ist die direkte Kommunikation, welche die beschriebene Orthogonalität
zwischen Sender und Empfänger voraussetzt. Der Manager teilt im voraus den Arbeitern
eine Teilspezifikation der Tupel mit, welche er in der Kommunikation mit dem Auftrageber
benutzen will. Hierdurch werden die Arbeiter in die Lage versetzt, Nachrichten welche an
den Manager gehen, aber für den Arbeiter gedacht sind zu erkennen und diese somit
direkt zu erhalten und verarbeiten zu können ohne dabei aber komplettes Wissen über
die Tupel zu haben, welche in der Kommunikation zwischen Auftraggeber und Manager
benutzt werden.
4.3 mehrere Tupel-Räume
Die Motivation für die Verwendung von mehreren Tupel-Räumen liegt darin, daß bei nur
einem Tupel-Raum dieser sozusagen zum Flaschenhals des Systems wird, wenn sehr viele
Tupel durch ihn geschleust werden müssen. Durch Verwendung von mehreren
Tupel-Räumen wird somit die Performance des Systems gesteigert.
Insbesondere können dann Tupel-Räume dynamisch erzeugt werden, wenn sie benötigt
werden.
Weiterhin hat man bei mehreren Tupel-Räumen mehr Spielraum bezüglich der
Namensgebung von Elementen der Tupel. Wenn man beispielsweise zwei Gruppen von Objekten hat,
welche nicht miteinander kommunizieren, müßte man bei nur einem Tupel-Raum trotzdem
bestimmte Konventionen bezüglich der Namensgebung einhalten, was aber eigentlich nicht
nötig bzw. sinnvoll ist.
Weiter bieten mehrere Tupel-Räume eine größere Sicherheit gegen Objekte, welche Tupel
mit Falschinformationen einfügen könnten oder auch wichtige Tupel aus dem Tupel-Raum
herausnehmen könnten. Bei mehreren Räumen erhöht sich die Sicherheit dadurch, daß ein
bestimmter Tupel-Raum nur der Gruppe von kommunizierenden Objekten bekannt ist, nicht
aber anderen Objekten welche nicht an dieser Kommunikation teilnehmen.
4.4 Beispiel: Das Philosophen Problem
Um die Effektivität der objekt-orientierten Tupel-Raum-Kommunikation deutlich zu machen
soll das Philosophen Problem (nach E. Dijkstra) betrachtet werden.
Philosophen werden als aktive Objekte modelliert die entweder denken oder essen. Sie sind
Instanzen der Klasse Philosopher . Demgegenüber sind Gabeln statische Entitäten und Instanzen
der Klasse Fork , welche sich die Philosophen aneignen können. Es existieren n
Instanzen von Philosopher und Fork . Die Philosophen müssen die Gabeln selber zwischen
sich aufteilen, wobei die Philosophen nicht direkt miteinander kommunizieren. Allerdings
wird die Verfügbarbeit an alle Philosophen verbreitet.
Die Gabeln sind Elemente eines Tupels. Das i -te Element eines Tupels ist eine Instanz von
Fork falls sie erhältlich ist, ansonsten nil. Der i -te Philosoph benutzt die i -te und
(i +1 mod n )-te Gabel zum essen. Die Philosophen kommunizieren über den
Tupel-Raum aTS .
Zu Beginn des Programms wird ein einzelnes Tupel, dessen Elemente Instanzen von Fork sind, in
den Tupel-Raum aTS eingefügt. Jeder aktive Philosoph führt dann das folgende Programm
(Smalltalk-Version) aus:
action (for the ith philosopher)
| tuple leftFork rightFork |
[
...
"dine"
...
tuple <- (a tuple whose ith and (i+1)th elements are
Formal ofClass: Fork and the rest are Formal any).
aTS get: tuple.
leftFork <- tuple at: i.
rightFork <- tuple at: i+1 \\ n.
tuple at: i put: nil; at: i+1 \\ n put: nil.
aTS put: tuple.
...
"dine with leftFork and rightFork"
...
tuple <- (a tuple whose ith and (i+1)th elements are nil
and the rest are Formal any).
aTS get: tuple.
tuple at: i put: leftFork; at: i+1 // n put: rightFork.
aTS put: tuple.
] loop
(get entspricht hierbei der normalen in -Operation und put entspricht out ,
siehe "Using Tuple Space Communication in Distributed Object-Oriented Languages ")
In der ersten Hälfte der Schleife enthält das empfangene Tupel die von den Philosophen
angeforderten Gabeln. Nach herausnehmen der Gabeln (und ersetzen durch nil ) wird es
wieder in den Tupel-Raum aTS eingefügt. Nach dem Essen mit den Gabeln wird das Tupel
wider empfangen und die Gabeln werden wieder zurückgelegt, damit sie ein anderer
Philosoph benutzen kann. Die Atomariät der Tupel-Raum Kommunikation garantiert das beide
Gabeln gleichzeitig erhalten werden, somit ist ein Deadlock nicht möglich.
Das Beispiel macht deutlich wie einfach und vorallem wie natürlich das Philosophen
Problem gelöst werden kann.
4.5 Tupel-Raum Manager
Insbesondere bei Verwendung von mehreren Tupel-Räumen findet man auch sogenannte
Tupel-Raum Manager, welche die Kommunikation zwischen den Prozessen koordinieren.
Ein Auftraggeber übergibt ein zu lösendes Problem an einen Tupel-Raum Manager, welcher
eine Menge von Arbeitern zur Verfügung hat und das Problem unter den Arbeitern aufteilt.
Wenn alle Teile berechnet wurden, wird die Lösung an den Auftraggeber übermittelt (siehe
Kapitel 4.2.2).
Weitere Aufgaben eines Tupel-Raum-Managers sind Matching, Gargabe Collection sowie
Handhabung von weitergehenden Zugriffen auf den Tupel-Raum bzw. auf die Tupel.
Je nach Implementierung wird nicht nur ein Manager sondern mehrere Manager eingesetzt.
4.6 Matching bei Objekt-Orientierung
Bei Objekt-Orientierung, also der Betrachtung von Tupeln, Templates und Tupel-Räumen
als Objekte, ergeben sich zwangsläufig Erweiterungen bezüglich Matching.
Ein Tupel bzw. Objekt kann dann als passend zu einem Template angesehen werden, wenn
einerseits die schon genannten Bedingungen zutreffen, aber weiterhin kann dann auch ein
Objekt als passend zu einem Template angesehen werden, wenn das Objekt mehr
Datenelemente beinhaltet als das Template. Bedingung ist dann, daß die Klasse des Objektes von
der Klasse des Templates abgeleitet sein muß und natürlich die jeweiligen Elemente vom
Typ her zueinanderpassen.
Je nach Linda-Implementierung besteht auch die Möglichkeit, verschiedene
(selbstdefinierte) Matching-Algorithmen zu wählen. Insbesondere bei selbstdefinierten
Matching-Algorithmen, welche je nach Applikation eingesetzt werden können, ist es auch
möglich innerhalb von einer Operation auf mehr als nur ein Objekt zugreifen zu können
(siehe "The Object Space Approach ", A. Polze).
Allerdings ist Matching immer eine schwierige Angelegenheit, beispielsweise wenn mit
komplexen Objekten, wie z.B. linked lists, gearbeitet wird, wenn ein Feld eines Objektes
das Objekt selber referenziert oder wenn zwei Felder das gleiche Objekt referenzieren.
Und ganz allgemeinen sind natürlich auch Zeiger problematisch. Bei einigen Linda-Varianten
werden dem Programmierer deshalb Restriktionen bezüglich der Verwendung solcher Objekte
auferlegt. In C++ Linda sind z.B. Zeiger verboten und nur in Spezialfällen erlaubt.
Aber nicht nur die aufgezeigten Beispiele sind schwierig zu handhaben, Matching stellt
grundsätzlich ein zentrales Problem bei Linda-Implementierungen dar, da effizientes
Matching bei komplexen Objekten schwieriger zu realisieren ist.
4.7 Vererbung und Wiederverwendung
Durch die Betrachtung von Tupeln und Tupel-Räumen als Objekte werden natürlich die aus
der Objekt-Orientierung bekannten Aspekte der Vererbung und Wiederverwendung
ermöglicht. Beispielsweise lassen sich dann neue Tupel-Räume von existierenden ableiten, womit
sich Tupel-Räume mit spezieller Funktionalität erzeugen lassen.
5. Schlußbemerkung
Durch Einbettung von Linda bzw. der dargestellten Linda-Primitiven in eine
Programmiersprache erhält man eine neue, parallele Variante dieser Sprache. Die Einbettung
wird im Allgemeinen durch Verwendung einer objekt-orientierten Sprache wie z.B. C++ oder
Eiffel erleichtert, da die Klassifikation von Tupeln bzw. Templates weniger aufwendig ist.
In objekt-orientierten Sprachen werden bzw. sollten Tupel, Tupel-Räume wie auch Templates
als First-Class Objekte behandelt werden. Hierdurch lassen sich dann Tupel oder Templates
wie jedes andere Objekt in
der Sprache handhaben. Die aus der Objekt-Orientierung bekannten Aspekte wie Vererbung,
Datenkapselung und Wiederverwendung werden somit ermöglicht.
Allerdings hat die Verwendung einer objekt-orientierten Sprache nicht nur Vorteile. Die Art der
verwendeten Kommunikationsprimitiven hat großen Einfluß auf die Performance und
Funktionaliät der Linda-Implementation. Wie schon gezeigt, findet man in manchen
objekt-orientierten
Sprachen Message Passing Verfahren, welche allerdings in einigen Situationen, wie z.B. bei
einem gemeinsamen Zugriff auf den Objektzustand, restriktiv sind.
Doch auch solche Restriktionen können vermindert bzw. aufgelöst werden, wie dies in einigen
Linda-Varianten gezeigt wird.
Doch das Linda-Modell und dessen verschiedene Implementierungen bieten immer noch Raum
für Erweiterungen und Verbesserungen, welches nicht zuletzt durch die Forschungen auf
diesem Gebiet unterstrichen wird.
6. Literaturverzeichnis
- Butcher, Paul u.a.:
- Global Synchronisation in Linda.
- In: Concurrency: Practice and Experience, 1994,
- Ausgabe 6(6), S. 505-516.
- Carriero, Nicholas; Gelernter, David:
- How to Write Parallel Programs.
- A First Course.
- 2. Auflage
- Cambridge, Massachusetts; London, England:
- The MIT Press 1991.
- Jellinghaus, Robert:
- Eiffel Linda.
- An Object-Oriented Linda Dialect.
- In: ACM SIGPLAN Notices, Dezember 1990,
- Ausgabe 25(12), S. 70-84.
- Matsuoka, Satoshi; Kawai, Satoru:
- Using Tuple Space Communication in Distributed Object-Oriented Languages.
- In: ACM Conference Proceedings,
- (Object-Oriented Programming Systems, Languages and Applications),
- 1988, September 25-30, S. 276-284.
- Pedersen, Henrik u.a.:
- Guides to C++ Linda.
- Aalborg, Dänemark:
- Aalborg University Centre 1990.
- Polze, Andreas:
- The Object Space Approach.
- Decoupled Communication in C++.
- In: Proceedings of Technology of Object-Oriented Languages and Systems (TOOLS),
- August 1993, Prentice Hall.
[an error occurred while processing this directive]