guava: ein javadialekt ohne nicht deterministiche effekte nicolas ngandeu seminar: objektorientierte...

59
GUAVA: EIN JAVADIALEKT OHNE GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE NICHT DETERMINISTICHE EFFEKTE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Upload: alexandra-goldschmidt

Post on 06-Apr-2016

219 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

GUAVA: EIN JAVADIALEKT OHNE GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE NICHT DETERMINISTICHE

EFFEKTEEFFEKTE

NICOLAS NGANDEU

Seminar: Objektorientierte Programmiersprachen WS 03/04

Page 2: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 2

GLIEDERUNGGLIEDERUNG 1- EINLEITLUNG 2- DIE PROGRAMMIERSPRACHE GUAVA

2.1- Klassenkategorien2.2- Beispiele

3- COMPILER-CHECKING3.1- „Region-“Checking3.2- Reads & Updates Checking3.3- „Global-“ Checking

4- PERFORMANCE 4.1- Nebenläufigkeit beim Lesen4.2- Sperrgranülarität4.3- Optimierung der Synchronisation 4.4- Objektmodel Verbesserungen

5- Mehr Beispiele 6- ZUSAMMENFASSUNG

Page 3: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 3

EINLEITUNGEINLEITUNG Guava ist ein Dialekt von Java, mit besonderen Regeln :

Nebenläufige Prozesse können nur durch synchronisierte Methoden auf die Daten zugreifen.

Ist durch 3 besondere Arten von Klassen spezifiziert: Monitors Values Objects

Page 4: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 4

EINLEITUNGEINLEITUNG Was ist das Problem?

Java ist OOP die nebenläufige Prozesse zulässt Aber!!

- Sie „müssen“ nicht synchronisiert werden- Nicht synchronisierte nebenläufige Prozesse bessere Laufzeit.- Durch das aktuelle „Java Memory Modell“ Konflikte

bei unsynchronisierten nebenläufigen Speicherzugriffen.Ergebnis

Die Anwendung des „nicht Sequenzialitäts- Konzeptes“ mit Java:

* Sehr kompliziert* Zahlreiche Anomalien wurden festgestellt.

Page 5: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 5

EINLEITUNGEINLEITUNG Was kann Guava??

erlaubt Optimierungsverfahren für den Java Compiler.

Beim „Multithreading“ kann Compiler selbständig Optimierungen entwickeln, wie „Double Checks Reads“

Überblick über die Syntax und ihre Semantik.

Page 6: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 6

GLIEDERUNGGLIEDERUNG 1- EINLEITLUNG 2- DIE PROGRAMMIERSPRACHE GUAVA

2.1- Klassenkategorien2.2- Beispiele

3- COMPILER-CHECKING3.1- „Region-“Checking3.2- Reads & Updates Checking3.3- „Global-“ Checking

4- PERFORMANCE 4.1- Nebenläufigkeit beim Lesen4.2- Sperrgranülarität4.3- Optimierung der Synchronisation 4.4- Objektmodel Verbesserungen

5- Mehr Beispiele 6- ZUSAMMENFASSUNG

Page 7: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 7

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVA Was ist Guava?

Konzipiert worden um die Entwicklung von Nebenläufigen Prozessen zu vereinfachen.

Im Vergleich zu Java, bietet Guava:- Verschiedene Klassenkategorien (Monitors – Values - Objects), die

durch ihre bestimmten Interaktionsregeln, die Synchronisation der Daten garantieren

- Zusätzliche Schlüsselwörter:* „Read“ & „Update“ für Methoden & Parameter* „Local“ & „Global“ für Methoden (oder Konstruktoren)* „Region“ für Parameter & return-Wert

Page 8: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 8

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVADie Klassenkategorien Die Klassenkategorien

In Java 2 Arten von Daten:

1- Referenzen: sind entweder „null“ oder haben einen „Pointer“ auf eine Instanz einer Klasse

2- Nicht-Referenzen: sind immer Werte mit einem einfachen Typ (int, char). Haben weder Klassen, Methoden, Vererbung noch andere Funktionalitäten eines Objektes.

Page 9: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 9

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVADie KlassenkategorienDie Klassenkategorien

Guava fügt 2 Unterschiede ein:

1- Die nicht-referenzierten Daten werden durch benutzerdefinierte Klassen mit primitivem Typ erweitert.

2- Zwei Arten von Referenzen:* die, die von verschiedenen Threads benutzt werden können* die, für die diese gemeinsamen Benutzungen nicht zulässig sind.

P.S: In dieser Arbeit, werden die Ausdrücke Values, Monitors und Objects INSTANZ genant und ganz normale Objekte (die unsynchronisierten Obj.) OBJEKTE genannt

Page 10: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 10

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVADie Klassenkategorien - MonitorsDie Klassenkategorien - Monitors

I - MONITORS Können durch einen oder mehreren Threads benutzt werden

Auf ihren Methoden kann nur sequenziell zugegriffen werden Operationen auf Monitoren finden immer synchronisiert statt (Methode o. äußere Zugriffe).

Andere Instanzen (Objects & Values) sind immer in einem Monitor enthalten. „OWNER“ Operationen auf andere Instanzen müssen nicht synchronisiert werden

Page 11: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 11

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVADie Klassenkategorien - MonitorsDie Klassenkategorien - Monitors

Diese Eigenschaften von Monitoren stellen schon eine erhebliche Verbesserung im Vergleich zu Java dar:

1 – Die Vereinfachung von Kodierung (Synchronisation muss nur noch in Monitoren betrachten werden)

2 – Die Performance von nebenläufigen Prozessen wird auch verbessert. (durch die Minderungen von Synchronisationsprozessen)

Page 12: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 12

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVADie Klassenkategorien - ObjectsDie Klassenkategorien - Objects

II - OBJECTS: sind java-ähnlich aber man kann nur sequentiell (oder durch nur einen Thread)

auf sie zugreifen. Sie brauchen keine „synchronised“-Methoden(Schlüsselwort „synchronised“ existiert nicht).

Aufgrund der Nichtsequentialität müssen bestimmte Regeln bezüglich der Interaktion von Monitoren und Values auf Objekten betrachtet werden. die wichtigsten Regeln:* Jedes Object muß immer in einer bestimmten Instanz

enthalten sein. „OWNER“* Objects dürfen nicht von einem „owner“ zu einem anderen „owner“ wandern* Es dürfen keine Referenzen zwischen Objects mit verschiedenen „owner“ geben

Page 13: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 13

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVADie Klassenkategorien - ValuesDie Klassenkategorien - Values

III -ValuesDa Objects nicht einwandfrei zwischen Monitors benutzt

werden dürfen bietet Guava die Values:

Sie sind direkt in Variablen gespeichert.

Sie sind wie die einfachen Typen von Java (int, char) sie haben keine Referenz eine Zuweisung erzeugt eine Kopie des Value „= =“ überprüft auf die Gleichheit eines Value.

Page 14: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 14

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVADie Klassenkategorien - ValuesDie Klassenkategorien - Values

Sie haben die Eigenschaften, dass sie sehr komplexe Datenstrukturen darstellen können und dann einwandfrei durch Monitors benutzt werden können.

Ihre Methoden und Attribute können exportiert werden.

Uninitialisiert haben sie immer einen „default-Wert“ und nicht null wie die Referenzen.

Page 15: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 15

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVADie Klassenkategorien - KlassenhierarchieDie Klassenkategorien - Klassenhierarchie

Die abstrakte Klasse „Instance“ ist die Wurzel des Vererbungsbaums.

Alle konkreten Klassen sind Unterklassen der 3 Klassen-kategorien.

Zwischen der Klasse „Instance“ und der Klassenkategorien befinden sich Interface-Kategorien (----)

Jede Klassenkategorien implementiert 2 Interface-Kategorien

Page 16: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 16

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVADie Klassenkategorien - KlassenhierarchieDie Klassenkategorien - Klassenhierarchie

Mobile wird durch Value & Monitor implementiert Eine Mobile-Instanz kann durch verschiedene Threads benutzt werden.

Local durch Value & Objekt implementiert: Sie werden nie von mehreren Threads benutzt

Reference durch Monitor & Objekt: „by reference“ kopiert.

Page 17: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 17

GLIEDERUNGGLIEDERUNG 1- EINLEITLUNG 2- DIE PROGRAMMIERSPRACHE GUAVA

2.1- Klassenkategorien2.2- Beispiele

3- COMPILER-CHECKING3.1- „Region-“Checking3.2- Reads & Updates Checking3.3- „Global-“ Checking

4- PERFORMANCE 4.1- Nebenläufigkeit beim Lesen4.2- Sperrgranülarität4.3- Optimierung der Synchronisation 4.4- Objektmodel Verbesserungen

5- Mehr Beispiele 6- ZUSAMMENFASSUNG

Page 18: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 18

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL IBEISPIEL I

Guava Programm das alle 3 Kategorien von Instanzen benutzt.

Ein Hash-Table der von mehreren nebenläufigen Prozessen benutzt werden kann

Page 19: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 19

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL IBEISPIEL I

Klasse SharedHashTable ist als Monitor definiert.

Sie bietet 2 Methoden an:* get(key), die Daten in Abhängigkeit vom key liefert* put(key,data), fügt Tupel Data-key in Hash Table

Key & Data sind vom Typ Mobile sie sind entweder Value oder Monitor

Page 20: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 20

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL IBEISPIEL I

BucketList ist vom Typ Value

Bietet auch 2 Methoden

Man hätte sie auch als Object definieren können Nachteile : Bewegung zwischen owner wäre begrenzt

Bucket ist Object (Default wenn keine Erweiterungen)

Page 21: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 21

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL IBEISPIEL I

Jede Liste von Bucket ist in einem BucketList-Objekt.

BucketList ist wiederum in SharedHashTable enthalten

Guava Compiler lässt keine Referenz zwischen Bucket-Objekten von verschiedenen Listen zu ermöglicht erhebliche Verbesserungen.

Page 22: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 22

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL I (Syntax)BEISPIEL I (Syntax)

2.2.1 - „Read“ & „Update“ Methoden Alle Methoden müssen entweder als „read“ oder „update“

definiert werden

Default-Wert für Methoden ist „read“.

Die update-Methoden können den Zustand einer Instanz verändernz.B. put() aus SharedHashTable & BucketList

Konstruktoren sind immer „update“.

Page 23: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 23

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL I (Syntax)BEISPIEL I (Syntax)

2.2.2 – Nebenläufige Prozesse in Monitors Es gibt 2 Arten von Locks:

* Update-Locks (Exklusive)* Read-Locks (Nicht Exklusive) Guava Compiler kann eine „read“-Methode erkennen.

z.B. SharedHashTable.get() ist eine „read“-Methode und wird automatisch so kompiliert, dass sie einen „read“-Lock benutzt. Jede von get() gelieferte Zahl kann nun ohne Sorgen in Nebenläufigen Prozessen benutzt werden

Page 24: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 24

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL IIBEISPIEL II

Klasse StringBuffer.

Wird in Guava genau wie in Java implementiert.

Es gibt keine Erweiterung (extends) der Klasse wird als Object implementiert ist für single Threads.

Page 25: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 25

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL II (Syntax)BEISPIEL II (Syntax)2.2.3 - „Read“ & „Update“

Parameters In Guava müssen die Methoden

spezifizieren, ob sie ihre Parameter updaten oder nicht.

Bei default sind alle Parameter read-only

Ein Parameter bekommt update wenn:* er der Ziel eine Zuweisung ist* eine update-Methode auf ihn aufgerufen wird* er als update-Parameter einer Funktion übergeben wird.

z.B. StringBuffer print(): die Methode LocalOutputStream.print ist eine update-Methode (verändert den Zustand des output Streams) s muss als update-parameter deklariert werden

Page 26: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 26

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL II (Syntax)BEISPIEL II (Syntax)2.2.4 – Regions

Schon bekannt:* Zugriff auf Object von 2 Verschiedenen Monitoren aus nicht erlaubt

Aber:* Ein Object kann von einem Monitor zum anderen übergeben werden (solange der zweite keine nebenläufige Benutzung durchführt).

Dieses Verhalten von Objekten wird durch die Begriffe:* Region* ownershiperklärt.

Page 27: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 27

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL II (Syntax)BEISPIEL II (Syntax)

Alle Objekt besitzen ein owner.(Buckets in BucketList, BucketList in SharedHashTable)

Bei Kompilierung weist Guava jeder Variablen eine Region zu.

Wenn 2 Variablen in derselben Region sind: sie haben den gleichen owner sie haben beide keinen owner (wird später erklärt)

In der Praxis können Programmierer Variablen Regionen zuweisen, durch Schlüsselwörter:* Kept* Lent

Page 28: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 28

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIEL II (Syntax)BEISPIEL II (Syntax)

„kept“-Parameter befinden sich in derselben Region wie „this“

Default-Wert für MethodenparameterSei MyClass object; - Wenn object ein Parameter der Method ist z.B. myMethod(object,param1); - oder die Methode wird von object aufgerufen

z.B. object.myMethod(param1,param2);

objekt und die Parameter der Methoden besitzen denselben owner befinden sich also in derselben Region.

Page 29: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 29

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIELBEISPIEL II (Syntax) II (Syntax)

„lent“-Parameter befinden sich in einer anderen Region wie „this“ Für den Compiler heißt das:

* dieser Parameter darf keinen Pointer (Referenz) zu irgendeiner anderen Komponente besitzen. Kurz gesagt, „lent“ ist die Gewährleistung, dass es keine Referenz von (oder zu) diesem (Fremd-) Objekt geben wird.

Alle Objektparameter müssen „lent“ sein. Warum???

- Ohne diese Regel wäre es dann möglich, für ein Objekt der Region A eine Referenz zu einem Objekt der Region B zu besitzen 2 Verschiedene Threads würden durch diese Referenzen zu einem Objekt gleichzeitig zugreifen können

Page 30: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 30

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIELBEISPIEL II (Syntax) II (Syntax)

Wie funktioniert das??? In der Klasse StringBuffer wird der Parameter „s“

von der Methode append() als „lent“ deklariert. append() darf keine Referenz von „s“ behalten.

In dem Monitor DataMonitor sieht man, wie StringBuffer.append() benutzt werden kann, um einen StringBuffer Objekt eines Monitors zu übergeben, der jetzt dieses Objekt updaten kann:

- appendData kriegt StringBuffer Objekt (target)

- target ruft StringBuffer.append() auf und übergibt lokalen StringBuffer „data“ Characters von data werden nach target kopiert

- Am Ende: Modifizierte Daten werden in target sichtbar und es ist sichergestellt worden, dass keine nebenläufigen Prozesse da interveniert haben.

Page 31: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 31

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIELBEISPIEL II (Syntax) II (Syntax)

2.2.5 – Neue Objekte (new return value) Eine Methode, die ein neues erzeugtes Objekt liefert, dass

keine Referenzen zu anderen Objekten hat, liefert ein sogenanntes „new value“ zurück.

Solche Objekte haben keinen owner.z.B. In Klasse StringBuffer Methode:

public “new” StringBuffer duplicate() { StringBuffer b = new StringBuffer();

……………………………return b;

}

Page 32: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 32

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIELBEISPIEL II (Syntax) II (Syntax)

Konstruktkoren erzeugen „immer“ neue return value

„immer“???? wenn sie einen „kept“-Parameter haben dann nicht. weil in diesem Fall ist das neue Objekt in derselben Region wie der Parameter.

Aber es ist immer besser Objekte ohne Region zu erzeugen, damit man sie je nach Gebrauch einer Region zuweisen kann.

Wie macht man das???

Page 33: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 33

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIELBEISPIEL II (Syntax) II (Syntax)

Sei:class X extends Monitor{

StringBuffer default = new StringBuffer („string“); update void moveString(update StringBuffer input in R, update MyClass out in R){......}update void moveDefault (update MyClass out in R){

moveString(default.duplicate(), out);}

} default.duplicate() liefert ein neues StringBuffer-Objekt „b“ ohne Region „b“ wird als Parameter zu moveString() übergeben moveString() ist so definiert, dass der erste Parameter (input) in R

seien muss „b“ wird Region R zugewiesen.

Page 34: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 34

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIELBEISPIEL II II

2.2.6 – Lokale & Globale Methoden

In Guava haben wir:- Lokale Methoden, die den Zustand eines Monitors nicht verändern können. Sie können nur auf Object und Value arbeiten und sie eventuell verändern- Globale Methoden, die Monitore entweder lesen oder updaten können. Nur diese Veränderungen sind für andere Threads sichtbar.

Default-Wert für alle Object-und Value-Methoden ist „local“.

Methoden aus Monitor-Klassen sind immer „global“ und können nicht als „local“ definiert werden.

Page 35: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 35

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIELBEISPIEL II II

In den vorigen Beispielen waren alle Methoden aus DataMonitor und SharedHashTable globale Methoden.

Im Gegenteil dazu, waren die Methoden aus Bucket, BucketList und StringBuffer lokal.

Wie sieht das aus???

Page 36: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 36

DIE PROGRAMMIERSPRACHE GUAVADIE PROGRAMMIERSPRACHE GUAVABEISPIELBEISPIEL II II

Die Methode y.getdefault() ruft eine Monitor-Methode auf variableX (die auch vom Typ Monitor ist) muss als „global“ deklariert werden.

Da die Transitivität eine Eigenschaft der Globalität ist müssen alle Methoden die y.getdefault() aufrufen als „global“ definiert werden.

Methoden, die „global update“ Methoden aufrufen müssen selbst als „global update“ definiert werden, auch wenn sie den Zustand ihrer eigenen Instanz nicht verändern.z.B. variableX.move() ist „global update“

y.doMove() muss es auch seien.

Page 37: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 37

GLIEDERUNGGLIEDERUNG 1- EINLEITLUNG 2- DIE PROGRAMMIERSPRACHE GUAVA

2.1- Klassenkategorien2.2- Beispiele

3- COMPILER-CHECKING3.1- „Region-“Checking3.2- Reads & Updates Checking3.3- „Global-“ Checking

4- PERFORMANCE 4.1- Nebenläufigkeit beim Lesen4.2- Sperrgranülarität4.3- Optimierung der Synchronisation 4.4- Objektmodel Verbesserungen

5- Mehr Beispiele 6- ZUSAMMENFASSUNG

Page 38: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 38

KOMPILERSKONTROLLENKOMPILERSKONTROLLEN

In Guava müssen 3 Arten von Regeln sichergestellt werden:

- Regionsregeln (Referenzen dürfen ihre Region nicht verlassen)

- Lockregeln für Lesen und Schreiben

- Global- und Lokalregeln für Methode

Page 39: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 39

KOMPILERSKONTROLLENKOMPILERSKONTROLLENRegionsüberprüfungRegionsüberprüfung

Diese Regeln garantieren, dass Objekte nie von mehreren nebenläufigen Prozessen zugegriffen werden können

In der (sehr komplizierten) Flanagan & Abadi Arbeit stellt man fest, das jede Methode:- eine Erlaubnis (Permission) besitzt, die dann sagt, welche Locks definiert sind, wenn die Methode aufgerufen wird.- eine „Protection Annotation“, die den Locks bescheid gibt, wie die Updates ausgeführt werden müssen.

Instanz-Variablen sind nur „spezielle“ Methoden aus dieser Flanagan & Abadi-Arbeit

Page 40: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 40

KOMPILERSKONTROLLENKOMPILERSKONTROLLENRegionsüberprüfungRegionsüberprüfung

Jede Variable hat einen Regionstyp und jede Methode (und Konstruktkor) haben eine Regionstypsignatur.

Diese Typ & Typsignaturen tragen dieselben Informationen wie die „Permissions“ und die „Protect Annotations“.

Der Regionstyp ist entweder der Name eines Locks oder null.* wenn null kein Lock ist auf dieser Variablen definiert und ein Lock muss definiert werden, bevor eine Methode von dieser Variablen aufgerufen wirdRegionstyp „r“ für Variable A „r“ Lock ist aktive.

Regionstyp von „this“ und alle Instanzvariablen = myowner

Page 41: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 41

KOMPILERSKONTROLLENKOMPILERSKONTROLLEN Überprüfungen für Überprüfungen für ReadsReads & & UpdatesUpdates

Diese Kontrollen garantieren, dass wenn eine „read“-Methode eines Monitors aufgerufen wird sie darf kein Update auf Daten durchführen, die dann durch ein zweiter Thread benutzt wären, wenn er diese „read“-Methode auch aufrufen würde.

Es ist sicherer bei einer System-Entwicklung das sogenannte „two-phase-lock“ für „read“-Methoden zu benutzen, die parallel laufen.

Außerdem gelten noch folgenden Regeln:

Page 42: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 42

KOMPILERSKONTROLLENKOMPILERSKONTROLLEN Überprüfungen für Überprüfungen für ReadsReads & & UpdatesUpdates

Eine „read“-Methode darf keine „global“ & „update global“ Methoden ausführen Zustand des Monitors könnte verändert werden

Eine „read“-Methode darf keine Variable deren Regionstyp „myowner“ ist updaten. (es sind Instanzvariablen) Eine „read“-Methode darf keine Updatemethode aufrufen von einer Variablen deren Regionstyp „myowner“ ist Eine „read“-Methode darf keine Variable deren Regionstyp „myowner“ ist, an eine „update“-Methoden übergeben

Keine Methode darf eine „update“-Methoden auf Parameter ausrufen, die keine Update-Parameter sind.

Page 43: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 43

KOMPILERSKONTROLLENKOMPILERSKONTROLLEN Global- und Lokalenregeln für Methode Global- und Lokalenregeln für Methode

Man kann nicht erwarten, dass bei mehreren Aufrufen von „global“-Methoden, immer wieder das gleiche Ergebnis geliefert wird („global“-Methoden sind auf der Monitor-Ebene definiert und sie werden durch mehrere Threads benutzt).

„global“-und „update“-Methoden dürfen nicht von „read“-Methoden aufgerufen werden

Alle „Zugriffe“ aus Monitoren durch Methoden sind bei default „global“

Alle Methoden (oder Konstruktoren), die eine globale Methode (oder Konstruktoren) aufrufen, müssen selbst als „global“ definiert werden.

Page 44: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 44

GLIEDERUNGGLIEDERUNG 1- EINLEITLUNG 2- DIE PROGRAMMIERSPRACHE GUAVA

2.1- Klassenkategorien2.2- Beispiele

3- COMPILER-CHECKING3.1- „Region-“Checking3.2- Reads & Updates Checking3.3- „Global-“ Checking

4- PERFORMANCE 4.1- Nebenläufigkeit beim Lesen4.2- Sperrgranülarität4.3- Optimierung der Synchronisation 4.4- Objektmodel Verbesserungen

5- Mehr Beispiele 6- ZUSAMMENFASSUNG

Page 45: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 45

PERFORMANZENPERFORMANZEN

Idempotent: ist eine Methode, deren Ergebnis von ihren Parametern abhängt, und mehrere nacheinender ausgeführte Aufrufe immer das gleiche Ergebnis liefern.

Java:- Hauptproblem ist die Synchronisation von Objekten, die durch Threads gemeinsam benutzt werden.- ist nicht in der Lage „local“-oder „read“ Methoden zu erkennen.

Im Gegenteil Guava:-lokale „read“-Methoden sind immer idempotent, solange ihre Ergebnisse „new value“ sind.

Page 46: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 46

PERFORMANZENPERFORMANZEN Parallel LesenParallel Lesen

In multiplen Thread-Systemen ist das parallele Lesen notwendig für gutes Laufzeitverhalten.

In Java muss das parallele Lesen explizit programmiert werden

In Guava wird es vom Compiler automatisch zugelassen und durchgeführt.

Es ist eine Technik, die dem „two-phase-locking“ Transaktions-system ähnlich ist

Page 47: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 47

PERFORMANZENPERFORMANZEN Parallel LesenParallel Lesen

Wenn ein Thread einen Monitor benutzt, wird er gelockt.- handelt es sich um eine „update“-Methode wird der konventionell

exklusive Lock durchgeführt.- ist es aber eine „read“-Methode, wird der nicht- exklusive read Lock benutzt kein anderer Thread ein „write“-Lock ausüben kann, aber „read“ Locks zugelassen sind .

Warum??? durch die Guava Regeln sind wir sicher, dass eine „read“-Methode nie einen Update durchführen wird, sie kann nur ihre eigenen Variablen verändern (unsichtbar für andere Threads)

Page 48: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 48

PERFORMANZENPERFORMANZEN SperrgranularitätSperrgranularität

Es wurde festgestellt, dass eine feine Sperrgranularität die Laufzeit verbessert (feine Sperrgranularität wird in Guava benutzt).z.B. Klasse SharedHashTableInstanzvariable BucketList [] bucket.- jede Methode aus der Klasse verursacht Veränderungen auf den Inhalt von bucket[] (d.h. auf BucketList Instanzen) Der Compiler macht anstatt ein allgemeines Lock auf bucket[] kleinere Locks auf die bucket[]-Felder. (bucket[lock]) Verschiedene Threads können gleichzeitig bucket [] benutzen ohne sich gegenseitig zu speren, vorausgesetzt sie greifen aus verschiedenen BucketList Instanzen auf bucket[] zu.

Page 49: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 49

PERFORMANZENPERFORMANZEN Optimierung der Synchronisation Optimierung der Synchronisation

Was ist die Synchronisation?? „unlock“-Operationen bedeuten in Java, dass alle Veränderungen,

die durch einen Thread durchgeführt worden sind jetzt wieder an allen Stellen (für allen anderen Prozesse) sichtbar sein müssen alle Felder des Cache-Speichers müssen gecheckt und ggf. synchronisiert werden deswegen sind die synchronisierten Methoden so teuer.

In Guava muß, durch die Regions- und Owner-Prinzipien, eine „unlock“-Operation nur die Änderungen des aktuellen Monitors sichtbar gemacht werden es wird nur eine bestimmte Adresse im Cache synchronisiert werden. weniger Kosten

Page 50: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 50

PERFORMANZENPERFORMANZEN Objektmodel VerbesserungenObjektmodel Verbesserungen

In Java kann jedes Objekt sehr oft gelockt werden es muss ein Lock-Feld im Header jedes Objektes vorgesehen seien

In Guava brauchen nur Monitore dieses Lock-Feld

Object & Value, die die meistens Instanzen sind, mit denen gearbeitet wird, benötigen keine Lock-Felder (können nicht gelockt werden) Platzverbesserung im Speicher

Page 51: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 51

GLIEDERUNGGLIEDERUNG 1- EINLEITLUNG 2- DIE PROGRAMMIERSPRACHE GUAVA

2.1- Klassenkategorien2.2- Beispiele

3- COMPILER-CHECKING3.1- „Region-“Checking3.2- Reads & Updates Checking3.3- „Global-“ Checking

4- PERFORMANCE 4.1- Nebenläufigkeit beim Lesen4.2- Sperrgranülarität4.3- Optimierung der Synchronisation 4.4- Objektmodel Verbesserungen

5- Mehr Beispiele 6- ZUSAMMENFASSUNG

Page 52: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 52

Mehr BeispielenMehr BeispielenSYNTAXSYNTAX

A – TypkonversionManche Typkonversionen (Casting) sind erlaubt:

Interfaces dürfen Klassen (Object, Monitor, Value) erweitern, aber alle Instanzen die dieses Interface implementieren, müssen vom Typ dieser Klassen seien.

Arrays sind Unterklassen von Value oder Object sie können in diesen Klassen oder Interfaces, die sie implementieren (Local, Mobiles und References), gecastet werden.

Page 53: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 53

Mehr BeispielenMehr BeispielenSYNTAXSYNTAX

B – Umwandlung in Javabytecode B.1- GuavaklassenWie kann man Guava in ganz normalen Java.class Datei umwandeln

Die Klasseninstanzen Object, Value, Monitor und die Interfaces Local, Mobile und Reference werden alle als Interface dargestellt.(weil die mehrfache Vererbung von Java nicht unterstützt wird. )

„$“ wird benutzt um die Guava-Klassen zu erkennen z.B. $Monitor, $Object,...

Die Synchronisationsmethoden werden nur aus den Klassen, die $Monitor implementieren, aufgerufen

Page 54: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 54

Mehr BeispielenMehr BeispielenSYNTAXSYNTAX

B – Umwandlung in Javabytecode B.2 – Benutzerdefinierte Klassen & Interfaces

Die abstrakten Klassen $MonitorImpl, $ObjectImpl, und $ValueImpl, werden benutzt, um die korrespondierenden Interfaces ($Monitor, $Value...) zu implementieren.

Klassen, die dann die Guava-Klassen erweitern, werden als Klassen, die diese abstrakten Klassen erweitern, definieren.class SharedHashTable extends Monitor class SharedHashTable extends $MonitorImplP.S Man könnten danach haben: class MyClass extends SharedHashTable

Interfaces, die Guava-Klassen erweitern, werden als Interfaces, die dann die neue Guava-Interfaces erweitern, definiert.interface MyInterface extends Value interface MyInterface extends $Value

Page 55: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 55

Mehr BeispielenMehr BeispielenSYNTAXSYNTAX

B – Umwandlung in Javabytecode B.3 – Kopieren und Test auf Gleichheit

Alle Unterklassen von Value und Monitor, beinhalten eine Methode copy(), die automatisch generiert wird.

Bei der Zuweisung einer Valuevariable wird die copy()-Methode aufgerufen und eine „Tiefe Kopie“ wird durchgeführt.

Bei Monitor muss die Methode explizit aufgerufen werden

Bei Mobile- oder Instance-Variablen wird bei der Laufzeit entschieden, ob eine Javazuweisung (Referenz) oder eine Kopie durchgeführt wird

Page 56: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 56

Mehr BeispielenMehr BeispielenSYNTAXSYNTAX

B – Umwandlung in Javabytecode B.4 – Synchronisation

Im Allgemeinen müssen alle Monitor-Methoden synchronisiert werden.Nur „private“-und „protected“-Methoden nicht (sie können nur von „this“ aufgerufen werden und „this“ ist synchronisiert worden)

Zugriffe auf Monitor-Variablen müssen auch in einem synchronized()-Block durchgeführt werden (lockt den Monitor)

Page 57: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 57

ZusammenfassungZusammenfassung Guava ist eine Java-ähnliche Sprache, die eine echte Monitor-

abstraktion unterstützt das garantiert eine komplette Trennung der Daten.

Bietet auch mehr Datentypen, als Java, die dann zwischen Monitoren getauscht werden können.

Sie unterstützt die Paralleldurchführung von „read“-Methoden

Die Programmierer müssen Klassen-Instanzen in Monitors, Value and Object unterteilen und eine Erweiterung der Javasyntax benutzen

Page 58: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

Guava: ein Javadialekt 58

ZusammenfassungZusammenfassung

Es ist wichtig zu sagen, dass nur die Komplexität von Multi-Threading Systemen durch die Guava Verbesserungen vermindert wird.

Bei Multi-Threading Applikationen, bietet Guava eine erhebliche Verbesserung im Vergleich zu Java- die „synchronized“-und „unsynchronized“-Memory Konzepte werden durch das einfache Monitor-Modell ersetzt.

Page 59: GUAVA: EIN JAVADIALEKT OHNE NICHT DETERMINISTICHE EFFEKTE NICOLAS NGANDEU Seminar: Objektorientierte Programmiersprachen WS 03/04

ENDE!!!

DANKE FÜR IHRE AUFMERKSAMKEIT