Nsp-3.41 3.4 Nebenläufigkeit und Objektorientierung ! Hinterfragen: wie verhalten sich die Konzepte Prozesse und Synchronisation zu den KonzeptenKlassen.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
Klassen - Verkettete Liste -
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Kritische Betrachtung
Zusammenfassung des Kapitels 8
der Universität Oldenburg
Verteilte Software - Java - Prozedurale Programmierung 1
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
Dynamische Webseiten Java servlets.
3.1.4 Leser/Schreiber-Ausschluß (reader/writer exclusion)
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Modulare Programmierung
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Das Roboterprojekt Einführung Der erste Entwurf Das Thread-Konzept Hindernisse Website.
Template Pattern Richard Göbel.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Projekt Alcatraz Java RMI / Spread - Gruppe A4.
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Information und Kommunikation
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
Parallel Programming Proofs ( yay !)
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Real Time Operating System
Equals, Hashcode und CompareTo Micha Kessler
EPROG Tutorium #5 Philipp Effenberger
Learning By Doing Ereignissteuerung (Events) prozedural ereignisgesteuert Unterprogrammaufruf an fest codierter Stelle Wann immer der Event auftritt, führe.
Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Lind 02/2005 Einführung in JAVA. Lind 02/2005 Beispiel: Mittelwert Es soll ein Programm erstellt werden, das den Mittelwert zweier reeller Zahlen berechnet.
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
Proseminar Java Threads. Deadlock und Fairness 1. Deadlock 2. Lockstarvation.
Java Thread Scheduling Jin Zhou Proseminar Java Thread Scheduling November 2000.
Beispielanwendung von Java Threads
Javelin Internet-based parallel computing using Java.
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Threads in Java Wiederholung der BS Grundlagen Alois Schütte AOSD1.
Prof. Dr. Alois Schütte Advanced System Programming 1 Das concurrent Paket 1 Überblick 2 Lock 3 Condition 4 Queue 5 Executors.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
2 Nebenläufige Prozesse. 2.1 Programmstruktur und Prozesse private Prozess = Anweisungen + Daten gemeinsame Aber:Wie verhält sich das Konstrukt „Prozess“
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
Nsp Bedingungssynchronisation Motivation: Wenn für eine Operation auf einem Objekt die Voraussetzung nicht erfüllt ist, ist es häufig angebracht,
3 Interaktion über Objekte. 3.1 Sperrsynchronisation dient der Vermeidung unkontrollierter nebenläufiger Zugriffe auf gemeinsame Datenobjekte und der.
Java-Kurs Übung Besprechung der Hausaufgabe
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
3.2 Bedingungssynchronisation Motivation: Wenn für eine Operation auf einem Objekt die Voraussetzung nicht erfüllt ist, ist es häufig angebracht, auf deren.
93 Das Monitorkonzept (nach Hoare/Brinch-Hansen 1974) Nur ein Prozess bzw. Thread kann zu einem bestimmten Zeitpunkt im Monitor aktiv sein => gegenseitiger.
1 VE 11 Kruskal-Realisierung Listen. 2 Auf dem Weg zur Kruskal-Realisierung Vorüberlegungen: Der Graph könnte dargestellt werden als Menge von Knoten,
Java Programme nur ein bisschen objektorientiert.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 Generische Programmierung in Java.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
© Tenbusch Oberstufenzentrum Informations- und Medizintechnik Objektorientierte Programmierung mit Java.
Praktische Informatik 1
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Java-Kurs - 8. Übung Klassen und Objekte: Vererbung
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
 Präsentation transkript:

nsp Nebenläufigkeit und Objektorientierung ! Hinterfragen: wie verhalten sich die Konzepte Prozesse und Synchronisation zu den KonzeptenKlassen und Vererbung ? Übersichtsartikel Briot/Guerraoui/Löhr 1998 (ACM Computing Surveys, Sept. 1998) Technischer BerichtBriot/Guerraoui/Löhr 1997

nsp Vererbungsanomalien (inheritance anomalies) Eine Vererbungsanomalie liegt vor, wenn in einer Unterklasse einer synchronisierten Klasse allein aus Synchronisationsgründen das Umdefinieren (overriding) einer ererbten Operation erforderlich wird.

nsp-3.43 Beispiel 1: class Resources {..... protected int available =...; public synchronized R request() { while(available == 0) wait(); available--;..... // get resource } public synchronized void release(R r) {..... // put resource available++; notify(); // NOT notifyAll ! }

nsp-3.44 class Resources2 extends Resources { public synchronized Pair request2() { while(available < 2) wait(); available -= 2;..... // get 2 resources } public synchronized void release(R r) { super.release(r); notifyAll(); } Mögliches Szenario ohne umdefiniertes release : 1. Prozesse warten bei request und bei request2 ; 2. release weckt Prozess in request2.....

nsp-3.45 Abhilfe? 2 Alternativen: Bessere Programmiersprache: MONITOR Resources {..... public R request() WHEN available > 0 {.....} public void release(R r) {.....} } MONITOR Resources2 extends Resources { public Pair request() WHEN available > 1 {.....} }

nsp-3.46 Sorgfältige Planung bei der Konstruktion der Oberklasse – hier: class Resources {..... public synchronized void release(R r) {..... // put resource available++; notifyAll(); } Weniger effizient, vermeidet aber die beschriebene Anomalie

nsp-3.47 Beispiel 2: Tabelle mit Materialkonstanten, Atomgewichten o.ä. class KeysToDoubles { protected final int max =...; // fixed capacity protected final Vector keys = new Vector(max); protected final double[] nums = new double[max]; public synchronized void enter(Object key, double num) { nums[keys.size()] = num; keys.addElement(key); } public double lookup(Object key) { // NOT sync. ! return nums[keys.indexOf(key)]; } } (Der Einfachheit halber werden hier alle möglichen Ausnahmen ignoriert.)

nsp-3.48 class UpdatableDoubles extends KeysToDoubles { public synchronized void update(Object key, double num) { nums[keys.indexOf(key)] = num; } public synchronized double lookup(Object key) { return super.lookup(key); } Mögliches Szenario ohne umdefiniertes lookup : Überlappende Ausführung von lookup und update bewirkt, daß ein nums -Element (das nicht unteilbar ist!) überlappend gelesen und überschrieben werden kann.

nsp-3.49 Abhilfe? Bessere Programmiersprache: statt synchronized deklarative Angaben zur wechselseitigen Verträglichkeit (compatibility) von Operationen, z.B. void enter(Object key, double num) {...} double lookup(Object key) COMP lookup, enter {...} void update(Object key, double num) {...} Sorgfältige Planung ??

nsp Beispiel 3: Schlange Puffer erweiterter Puffer class LinearQueue { // 3.1.2, protected int size, front, rear;... public void append(Object x) throws... {...} public Object remove() throws... {...} } Bei dieser Repräsentation der Schlange (3.1.2) verursacht eine Überlappung von append mit remove keine Probleme! Daher :

nsp class Buffer extends LinearQueue { // sync. protected final Sema frame = new Sema(size); protected final Sema messg = new Sema(0); protected final Object sending = new Object(); protected final Object receiving = new Object(); public void append(Object x) { frame.P(); synchronized(sending) {super.append(x);} messg.V(); } public Object remove() {Object x; messg.P(); synchronized(receiving) {x = super.remove();} frame.V(); return x; } }

nsp class ClearableBuffer extends Buffer { public void clear() { ??? front = 0; rear = 0; ??? } Nicht implementierbar ohne völliges Umschreiben von append/remove ! Abhilfe ? Mit WHEN und COMP ! Sorgfältige Planung ??

nsp Aktive Objekte (active objects) Zur Erinnerung: 2.1.4:Prozess Objekt/Klasse Prozessaktivität = ausgezeichneter Block 2.2.1:Java: Prozess (Thread) = Unterklasse von Thread Prozessaktivität = Rumpf von run

nsp Autonome Operationen Wünschenswert: Klasse kann autonome Operationen enthalten (nicht Java!) AutonomousMethodDecl = AUTO Identifier Block Eine solche Operation wird nach abgeschlossener Initialisierung ohne expliziten Aufruf automatisch gestartet und nach Beendigung automatisch erneut gestartet. Es gibt hier weder Modifizierer noch Argumente noch Ergebnis!

nsp Beispiel (kommt ohne Synchronisation aus!): class Moving { // in plane; Vector is 2-dim. public Moving(Vector start, double timeUnit) { pos = start.clone(); // position vel = new Vector(0,0); // velocity time = timeUnit; } // time granule protected Vector pos; protected volatile Vector vel; protected final double time; AUTO step { pos = new Vector(pos.x + vel.x * time, pos.y + vel.y * time); } public void setVelocity(Vector v) { vel = v.clone(); } }

nsp Erweiterung z.B. so: class MovingAndBeeping extends Moving { public MovingAndBeeping(Vector s, double t, Speaker sound) { super(s,t); this.sound = sound; } protected volatile boolean beepOn; protected final Speaker sound; AUTO beep WHEN beepon { sound.beep(); } public void on(boolean b) { beepOn = b; } } (wiederum keine Synchronisation erforderlich)

nsp class Moving { //... in Java – aber Frühstart-Gefahr (2.2.1) public Moving(Vector start, double timeUnit) { pos = start.clone(); // position vel = new Vector(0,0); // velocity time = timeUnit; // time granule new Thread(new Runnable() { public void run() { while(true) step();}}).start();} protected Vector pos; protected volatile Vector vel; protected final double time; private void step() { pos = new Vector(pos.x + vel.x * time, pos.y + vel.y * time); } public void setVelocity(Vector v) { vel = v.clone(); } }

nsp Asynchrone Operationen Zur Erinnerung (2.1.2): Wenn eine ergebnislose Operation nach Aufruf und erfolgter Parameter-Übergabe asynchron ausgeführt werden soll (d.h. nebenläufig zum Aufrufer), kann das mit der Gabelungsanweisung FORK Operation(Parameters) erreicht werden. FORK gibt dem Aufrufer die Möglichkeit, zwischen Synchronie und Asynchronie zu wählen.

nsp Alternative:Asynchrone Operation (nicht Java!), d.h. Asynchronie ist Eigenschaft der Operation (und Gabelungsanweisung entfällt) AsynchronousMethodDecl = ASYNC MethodDecl ASYNC ist ein Modifizierer (modifier). Vorteile: Semantik! Es ist i.a. nicht gleichgültig, ob eine Operation synchron oder asynchron abläuft. Effizienz: Übersetzer kann Threading optimieren.

nsp Beispiel: class Printer {... public ASYNC void print(File f) {..... // do print f } public Status check() {..... } Benutzung:... s = printer.check(); printer.print(f);...

nsp In Java: class Printer {... public void print(final File f) { // async. new Thread(new Runnable(){ public void run(){.../* do print f */...}}).start(); } public Status check() {..... }

nsp Verzögerte Synchronisation Asynchrone Operationen mit Ergebnis (nicht Java!): class Printer {... public ASYNC Result print(File f) {..... // do print f } Verweistyp, nicht primitiver Typ! Aufruf in Result result = printer.print(File f); liefert einen Ergebnisvertreter (future) result

nsp Implizite Synchronisation mit der Operations-Beendigung bei erstem Zugriff auf den Ergebnisvertreter – verzögerte Synchronisation (lazy synchronization, wait-by-necessity) Result result = printer.print(f); // do other business... Status s = result.getStatus(); // await termination of print, // then access print result

nsp ? Nachbau in Java ? Übung ? Verhalten von ASYNC R op(A a) PRE... WHEN... { } ehrgeizigere Übung