1 / 4

Parallelverarbeitung

Parallelverarbeitung. Learning By Doing. Scheduler. Prozess 1. Prozess 2. Gemeinsame Ressourcen. Multithreading (Nebenläufigkeit). Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse.

Download Presentation

Parallelverarbeitung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Parallelverarbeitung Learning By Doing Scheduler Prozess 1 Prozess 2 GemeinsameRessourcen 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 • Hauptschwierigkeit: Konfliktfreie Verwaltung gemeinsamer Ressourcen

  2. Deadlock Learning By Doing Ich warte aufdas Schreib-zeug... Ich warte aufdas Buch... Ha,ha...die warten in alle Ewigkeit Threads, Deadlock • 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! s. Buch S. 467ff

  3. Multithreading-Konzept Learning By Doing • 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 // 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); } } } 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(); } } class Wanderweg implements Runnable public void run() { while (true) { t.forward(100); t.left(angle); } } Alternative: Wanderwegvon Thread ableiten 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.

  4. Thread beenden volatile private boolean isRunning = true; Learning By Doing Thread beenden • Um einen Thread zu beenden, lässt man die run()-Methode zu Ende laufen • Man verwendet dazu eine boolesches Flag isRunning • WanderTurtle ist eine Innere Klasse, damit sie undWbzEx19 Zugriff auf isRunning haben • isRunning sollte man volatile deklarieren, da zwei verschiedene Threads darauf zugreifen // 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"); } } 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(); } }

More Related