advertisement

Concurrency Paradigmen

60 %
40 %
advertisement
Information about Concurrency Paradigmen
Technology

Published on February 21, 2014

Author: romanroe

Source: slideshare.net

Description

Concurrency Paradigmen

Threads, Java Executor, Future, Promise, Actors, STM, Clojure, Scala
advertisement

Concurrency Paradigmen Roman Roelofsen Managing Director (aka Alpha Geek) Weigle Wilczek GmbH Twitter: romanroe Java Forum Stuttgart, 7. Juli 2011

Concurrency - Nebenl¨ufigkeit a Beispiele f¨r Nebenl¨ufigkeit u a Eine Anwendung erzeugt und startet neue Thread (f¨r u Performance, blockierende API, ...) Die Umgebung erzeugt und startet neue Threads (z.B. Web-Server)

Nebenl¨ufigkeit - Relevanz Heute a Programmierer m¨ssen sich zunehmend mit Nebenl¨ufigkeit u a befassen Anzahl Rich-Web-Client steigt Browser Smart Phones Tablets ... Autos, Fernseher, ... Steigende Anzahl von Threads auf dem Server ... zwischen denen eine Kommunikation stattfinden muss Nebenl¨ufigkeit war schon immer schwierig und wichtig a ... hat aber bisher selten die notwendige Aufmerksamkeit erhalten

Nebenl¨ufigkeit - Relevanz Heute a

Nebenl¨ufigkeit - Relevanz Heute a Multi-Core Krise ”The free lunch is over” CPU Core Leistung stagniert Anzahl der Cores steigt Erh¨hter Bedarf von Nebenl¨ufigkeit o a Prozesse Threads

Nebenl¨ufigkeit - Relevanz Heute a Multi-Core Krise? Artikel, Blogs, etc. sprechen von riesigen Problemen Multi Core Crisis, Software Crisis, ... Parallelisierungs-Frameworks sind die neuen ”Framework-Stars” Java: Kilim, Actors Guild, Actor Foundry Scala: Scala Actors, Lift, Akka Python: ParallelProcessing Groovy: GPars

Nebenl¨ufigkeit - Relevanz Heute a Analyse Web Anwendungen Web Anwendungen sind oft eine ”Data Processing Pipeline” zwischen Browser und Datenbank Jeder HTTP Request wird auf einen Thread ubertragen ¨ Anzahl der Request i.d.R. gr¨ßer als Anzahl CPU Cores o Entscheidene Fragen: HTTP Requests >= Cores? Besteht die Notwendigkeit, zwischen den Requests zu kommunizieren/Daten auszutauschen? Wird mit externen Systemen kommuniziert? Datenbank Web Service ...

Nebenl¨ufigkeit - Relevanz Heute a Analyse Desktop Anwendungen Swing/SWT GUI Elemente sind single-threaded => Autsch! Events werden vermehrt parallel ausgef¨hrt werden m¨ssen u u Desktop Anwendungen m¨ssen einen Weg finden, mehere u Cores gleichzeitig zu nutzen

Nebenl¨ufigkeit - Relevanz Heute a Analyse Desktop Anwendungen Swing/SWT GUI Elemente sind single-threaded => Autsch! Events werden vermehrt parallel ausgef¨hrt werden m¨ssen u u Desktop Anwendungen m¨ssen einen Weg finden, mehere u Cores gleichzeitig zu nutzen Entscheidene Fragen: Gibt es Performance Probleme? K¨nnen die Algorithmen parallelisiert werden? o Wird mit externen Systemen kommuniziert? Datenbank Web Service ...

Nebenl¨ufigkeit - Herrausforderungen a Einfach wenn... Threads zu 100% isoliert laufen Die Ausf¨hrungsumgebung single-threaded ist u Die Anwendung zustandslos ist Das Ergebnis uninteressant ist (fire-and-forget)

Nebenl¨ufigkeit - Herrausforderungen a Identity, Value, State und Mutable State werden beim Einsatz aktueller Programmiertechniken zu oft vermischt1 Definition: Value: Ein stabiler, sich nicht ver¨ndernder Wert a Identity: Eine Entit¨t, der im Laufe der Zeit verschiedene a Werte zugeordnet werden State: Der Wert, den eine Entit¨t zu einem bestimmten a Zeitpunkt hat Mutable State: Wenn eine Entit¨t verschiedene Werte annimmt a Ver¨nderbare Zust¨nde sind ein Problem, wenn a a Nebenl¨ufigkeit vorhanden ist a 1 Diskussionsgrundlage: http://www.clojure.org/state

Value/Identity/State - Johns Alter Beschreibung: Identity: Das Alter von John McCarthy Values: Die Zahlen 50, 51, 52, ... State 1: John McCarthys Alter 1977 State 2: John McCarthys Alter 1978 Mutable State: Definitiv :-)

Value/Identity/State - Johns Alter In Java: Identity: int johnsAge; Values: 50; 51; 52; State 1: John McCarthys Alter 1977 johnsAge = 50; State 2: John McCarthys Alter 1978 johnsAge = 51;

Value/Identity/State - Johns Alter Identity: int johnsAge = 50; Threads: Thread 1 { johnsAge = johnsAge + 1; } Thread 2 { johnsAge = johnsAge + 2; } Thread 3 { johnsAge = johnsAge + 3; } Servlet Code public void doGet(HttpServletRequest req, HttpServletResponse res) { render(johnsAge); render(johnsAge); render(johnsAge); }

Nebenl¨ufigkeit - Relevanz Heute a Neues Beispiel Geld von Konto A auf Konto B uberweisen ¨

Value/Identity/State - Geld uberweisen ¨ Konto-Entit¨ten a Konto a = new Konto(); Konto b = new Konto(); Geld uberweisen ¨ Thread { a.abheben(100); b.einzahlen(100); } Kontostand pr¨fen u Thread { a.getKontostand(); b.getKontostand(); }

Value/Identity/State - Geld uberweisen ¨ L¨sungsversuch 1 o class Konto { public synchronized void abheben(long betrag) { ... } public synchronized void einzahlen(long betrag) { ... } }

Value/Identity/State - Geld uberweisen ¨ L¨sungsversuch 2 o synchronized (kontoA) { synchronized (kontoB) { kontoA.abheben(100); kontoB.einzahlen(100); } }

Value/Identity/State - Arbeit parallelisieren Java Code Thread 1, Thread 2, Thread 3

Java’s Bordmittel Java Syntax / API synchronized Thread.sleep() Thread.interrupt() Thread.join() Thread.wait() Thread.notify() Evaluierung Sehr low-level L¨sst sich kaum auf Gesch¨ftlogik ubertragen a a ¨ Code l¨sst sich schwer komponieren a Geringe Wiederverwendung Gefahr von Deadlocks

Gentlemen: Choose Your Weapons! Executor Future/Promise Actors STM Data Flow Concurrency

Executor Java Code Executor

Future/Promise Bisher waren unsere Threads ”fire-and-forget” Das Ergebnis wurde nicht verarbeitet Doch wieder Thread.join()? (Igitt!!)

Future/Promise Java Code Future

Actors Message-passing Concurrency Bekannt durch Erlang Programmiersprache Kein ”Shared State” Actors kommunizieren uber Messages ¨ Asynchron & non-blocking Reactive Actors senden selbstst¨ndig Messages a Actors k¨nnen neue Actors erzeugen o Actors bestimmen selber ihr Verhalten beim Empfang

Actors Jeder Actor hat seinen eigenen ”Lebensraum” Actor ⇐⇒ Thread, oder Thread Pool Mailbox Empfangene Nachrichten werden in der Mailbox gespeichert Sequentielle Abarbeitung (wie single-threaded) Actor entscheidet selber, wann Nachrichten aus der Mailbox verarbeitet werden Implementierungen Scala Actors (Teil der Scala Distribution) Akka (Scala & Java) Kilim (Java)

Actors Scala Code Actors1 Actors2 Actors3

Software Transactional Memory Software Transactional Memory (STM) Der Speicher (Heap/Stack) wird wie eine Datenbank behandelt ACI(kein D) Atomar: Sequenz von Daten-Operationen wird entweder ganz oder gar nicht ausgef¨hrt u Konsistent: Eine Sequenz von Daten-Operationen hinterl¨sst a nach Beendigung einen konsistenten Datenzustand Isoliert: Nebenl¨ufige Daten-Operationen beeinflussen sich a nicht gegenseitig

Software Transactional Memory Transaktionsklammer n¨tig o Begin, Commit, Rollback Verschachtelungen sind m¨glich (Yiepiee!) o Transaktionen werden bei Kollisionen wiederholt Transaktionen d¨rfen keine Seiteneffekte beinhalten! u Implementierungen Multiverse (Java) Scala STM Elementarer Bestandteil der Sprache Clojure

Clojure ”Lisp f¨r die Massen” u L¨uft auf der JVM a Interoperabilit¨t mit Java a Variablen k¨nnen ihren Wert nur im Rahmen des STM o Systems ver¨ndern a

Clojure - ”Hello John!” (ns hello-john) (def hello "Hello") (defn say-hello [firstname] (println hello firstname "!")) (say-hello "John") >> Hello John !

Software Transactional Memory Clojure Code stm1 stm2 stm3

DataFlow Concurrency DataFlow Variablen Eher deklarativ Nebenl¨ufigkeit und sequentieller Code wird elegant vermischt a Der Datenfluss (Abh¨ngigkeiten) wird zwischen Variablen a definiert Deterministisch 3 einfache Operationen Create - DataFlow Variable erstellen Wait - Warten, dass die Variable einen Wert erh¨lt a Bind - Der Variable einen Wert zuweisen

DataFlow Concurrency Beispiel Akka Framework import akka.dataflow.DataFlow._ val x, y, z = new DataFlowVariable[Int] thread { z << x() + y() println("z = " + z()) } thread { x << 40 } thread { y << 2 }

Fazit Jeder sollte mit den vorgestellten Konzepten vertraut sein Eine konkrete Implementierung kann ihm Rahmen eines Projektes evaluiert und gelernt werden Es eilt nicht... ... sollte jedoch auch nicht ignoriert werden Es gibt kein ”Silver Bullet” Jedes vorgestellte Konzept hat Vor- und Nachteile Nicht jedes Konzept ist f¨r jedes Problem geeignet u

Durchstarten mit Scala

Wir stellen ein! Wir suchen f¨hige Java/Scala/Clojure Entwickler a Wir bieten eine gesunde Mischung aus Programmierer Berater Kicker-Profi Bitte bei mir melden! roelofsen@weiglewilczek.com

Fragen?

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

Concurrency Theory for Multicore Parallel Computation @ TU ...

Concurrency Theory for Multicore Parallel Computation. Parallele Ausführungsplattformen wie beispielsweise Multi-Core bzw. Many-Core Architekturen sind ...
Read more

Actor Model – Wikipedia

Dies unterscheidet das Actor Model grundlegend von klassischen und verbreiteten Shared-Memory-Concurrency ... Sprachen mit gemischten Paradigmen wie ...
Read more

Jonas Bonér: Alternative Concurrency Paradigmata auf der ...

Doch es gibt Alternativen zur sogenannten “Shared-State Concurrency ... Zustände und stellt alternative Paradigmen wie Dataflow Concurrency, ...
Read more

SE@RWTH : Teaching : WS14/15 : Proseminar - Meilensteine ...

... Multithreading und andere Concurrency Paradigmen in Java (2) Java Exceptions und alternative Fehlerbehandlung-Strategien ...
Read more

Cω – Wikipedia

Paradigmen: multiparadigmatisch: strukturiert, imperativ, objektorientiert, funktional: Erscheinungsjahr: 2003: ... LINQ, Joins Concurrency Library:
Read more

Nebenläufigkeit - TH Köln

Paradigmen der Programmierung 2013 2 Motivation für Nebenläufigkeit Nebenläufigkeit = mehrere Kontrollflüsse werden in nicht festgelegter Weise ...
Read more

Komplexitat¨ Einleitung Programmierstile Komplexitat bew ...

Komplexitat¨ bew¨altigen Frederik Heber Einleitung Entwicklung der Programmierstile Paradigmen Hauptelemente der OOP Abstraction Encapsulation Modularity
Read more

Java 8 heißt funktionale Programmierung willkommen | heise ...

... die sich als gutes Beispiel für eine gelungene Kombination aus funktionalem und objektorientierten Paradigmen ansehen ... Concurrency-Updates, ...
Read more