Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.

Ähnliche Präsentationen


Präsentation zum Thema: "Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung."—  Präsentation transkript:

1 Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung kann auf einem Einprozessorsystem simuliert werden und trotzdem grosse Vorteile aufweisen. Die Prozesse laufen dann quasi-parallel Ein Prozess-Scheduler sorgt für die "Umschaltung" (Context switch) der Prozesse Prozess 1 Scheduler Gemeinsame Ressourcen Prozess 2 Hauptschwierigkeit: Konfliktfreie Verwaltung gemeinsamer Ressourcen

2 Learning By Doing Deadlock Threads, Deadlock s. Buch S. 467ff Statt Prozesse können auch Programmteile eines einzelnen Programms quasi-parallel laufen. Diese werden Threads (Fäden) genannt Multithread-Programme sind aber bezüglich Programmierlogik (und für den Entwickler der Programmiersprache) anspruchsvoll, da die Threads üblicherweise zusammenarbeiten müssen Grundregeln: Man entkopple die Threads so weit wie möglich Man achte auf alle Seiteneffekte (so lokal wie möglich, so wenig global wie möglich) Muss ein Thread auf die Ergebnisse eines anderen warten, so besteht immer die Gefahr eines Deadlocks! Ich warte auf das Buch... Ich warte auf das Schreib- zeug... Ha,ha... die warten in alle Ewigkeit

3 Learning By Doing Multithreading-Konzept Multithreading-Konzept in Java Klasse Wanderweg schreiben, die das Interface Runnable, d.h. die Methode run() implementiert Der Scheduler erzeugt einen neuen Thread und ruft run() auf. Der Thread "stirbt", sobald run() zu Ende läuft. public class WbzEx18 { public WbzEx18() { Wanderweg ww1 = new Wanderweg(70); Thread thread1 = new Thread(ww1); thread1.start(); Wanderweg ww2 = new Wanderweg(110); Thread thread2 = new Thread(ww2); thread2.start(); } public static void main(String[] args) { new WbzEx18(); } // WbzEx18.java import ch.aplu.turtle.*; class Wanderweg implements Runnable { private Turtle t = new Turtle(); private double angle; public Wanderweg(double angle) { this.angle = angle; } public void run() { while (true) { t.forward(100); t.left(angle); } class Wanderweg implements Runnable public void run() { while (true) { t.forward(100); t.left(angle); } Objekt dieser Klasse instanzieren, liefert Referenz ww1 Objekt der Klasse Thread instanzieren und dabei die Objektreferenz ww1 übergeben start()-Methode des Threads aufrufen class Wanderweg extends Thread Alternative: Wanderweg von Thread ableiten

4 Learning By Doing Thread beenden Um einen Thread zu beenden, lässt man die run()-Methode zu Ende laufen // WbzEx19.java import ch.aplu.turtle.*; public class WbzEx19 { class WanderTurtle extends Turtle implements Runnable { private double angle; public WanderTurtle(double angle) { this.angle = angle; } public void run() { label("Habe Volldampf"); while (isRunning) { forward(100); left(angle); } label("Bin müde"); } Man verwendet dazu eine boolesches Flag isRunning WanderTurtle ist eine Innere Klasse, damit sie und WbzEx19 Zugriff auf isRunning haben isRunning sollte man volatile deklarieren, da zwei verschiedene Threads darauf zugreifen private boolean isRunning = true; public WbzEx19() { new Thread(new WanderTurtle(70)).start(); try { Thread.currentThread().sleep(5000); } catch (InterruptedException ex) {} isRunning = false; } public static void main(String[] args) { new WbzEx19(); } Thread beenden volatile private boolean isRunning = true;


Herunterladen ppt "Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung."

Ähnliche Präsentationen


Google-Anzeigen