SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
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?

Contenu connexe

En vedette

Grandes guitarristas
Grandes guitarristasGrandes guitarristas
Grandes guitarristasshiodex
 
Galápagos
GalápagosGalápagos
GalápagosANDI1221
 
YP-P3 Bilder
YP-P3 BilderYP-P3 Bilder
YP-P3 Bilderjulia135
 
Puente de Diciembre
Puente de DiciembrePuente de Diciembre
Puente de DiciembreSolplan
 
La empresa y el medio ambiente
La empresa  y el medio ambienteLa empresa  y el medio ambiente
La empresa y el medio ambienteedwardyate
 
Karen vargas[1][1][1]
Karen vargas[1][1][1]Karen vargas[1][1][1]
Karen vargas[1][1][1]chaimiu
 
Actividades lazaro de_tormes
Actividades lazaro de_tormesActividades lazaro de_tormes
Actividades lazaro de_tormesDaniel Mariño
 
Wollen Sie das VORSCHAUEN? YP-S3 #.1
Wollen Sie das VORSCHAUEN? YP-S3 #.1Wollen Sie das VORSCHAUEN? YP-S3 #.1
Wollen Sie das VORSCHAUEN? YP-S3 #.1julia135
 
Frauen :-)
Frauen :-)Frauen :-)
Frauen :-)Sylvi O.
 
Ejercicio con hipervinculo
Ejercicio con hipervinculoEjercicio con hipervinculo
Ejercicio con hipervinculoLitzySSS
 
Sergio nicolas y jahir 10 a
Sergio nicolas y jahir 10 aSergio nicolas y jahir 10 a
Sergio nicolas y jahir 10 aJeisson Guzman
 
Diapositivas ciencias
Diapositivas cienciasDiapositivas ciencias
Diapositivas cienciasharold007
 
Educacion virtual
Educacion virtualEducacion virtual
Educacion virtualFslizaola
 
Morphex Praesentation Fertig Laeuft Automatisch
Morphex Praesentation Fertig Laeuft AutomatischMorphex Praesentation Fertig Laeuft Automatisch
Morphex Praesentation Fertig Laeuft Automatischguest8bc220a
 

En vedette (20)

Grandes guitarristas
Grandes guitarristasGrandes guitarristas
Grandes guitarristas
 
Galápagos
GalápagosGalápagos
Galápagos
 
YP-P3 Bilder
YP-P3 BilderYP-P3 Bilder
YP-P3 Bilder
 
Puente de Diciembre
Puente de DiciembrePuente de Diciembre
Puente de Diciembre
 
La empresa y el medio ambiente
La empresa  y el medio ambienteLa empresa  y el medio ambiente
La empresa y el medio ambiente
 
CAPA DE OZONO
CAPA DE OZONOCAPA DE OZONO
CAPA DE OZONO
 
BENDÍCEME
BENDÍCEMEBENDÍCEME
BENDÍCEME
 
4. matu, der elefant
4. matu, der elefant4. matu, der elefant
4. matu, der elefant
 
Karen vargas[1][1][1]
Karen vargas[1][1][1]Karen vargas[1][1][1]
Karen vargas[1][1][1]
 
Actividades lazaro de_tormes
Actividades lazaro de_tormesActividades lazaro de_tormes
Actividades lazaro de_tormes
 
Wollen Sie das VORSCHAUEN? YP-S3 #.1
Wollen Sie das VORSCHAUEN? YP-S3 #.1Wollen Sie das VORSCHAUEN? YP-S3 #.1
Wollen Sie das VORSCHAUEN? YP-S3 #.1
 
Frauen :-)
Frauen :-)Frauen :-)
Frauen :-)
 
Ejercicio con hipervinculo
Ejercicio con hipervinculoEjercicio con hipervinculo
Ejercicio con hipervinculo
 
Sergio nicolas y jahir 10 a
Sergio nicolas y jahir 10 aSergio nicolas y jahir 10 a
Sergio nicolas y jahir 10 a
 
Diapositivas ciencias
Diapositivas cienciasDiapositivas ciencias
Diapositivas ciencias
 
Begrüssung
BegrüssungBegrüssung
Begrüssung
 
Calentamiento global bogota
Calentamiento global bogotaCalentamiento global bogota
Calentamiento global bogota
 
DN11_U3_A13_OMPH
DN11_U3_A13_OMPHDN11_U3_A13_OMPH
DN11_U3_A13_OMPH
 
Educacion virtual
Educacion virtualEducacion virtual
Educacion virtual
 
Morphex Praesentation Fertig Laeuft Automatisch
Morphex Praesentation Fertig Laeuft AutomatischMorphex Praesentation Fertig Laeuft Automatisch
Morphex Praesentation Fertig Laeuft Automatisch
 

Similaire à Concurrency Paradigmen

Einführung in das Actor Model mit Akka.net
Einführung in das Actor Model mit Akka.netEinführung in das Actor Model mit Akka.net
Einführung in das Actor Model mit Akka.netRalph Waldenmaier
 
Anwendung von Java Enterprise Edition (J2EE)
Anwendung von Java Enterprise Edition (J2EE)Anwendung von Java Enterprise Edition (J2EE)
Anwendung von Java Enterprise Edition (J2EE)Andreas Schreiber
 
Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Michael Romer
 
Multithreading in c# mit tpl
Multithreading in c# mit tplMultithreading in c# mit tpl
Multithreading in c# mit tplDavidT27
 
JPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEJPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEhwilming
 
SplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaSplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaGeorg Knon
 
SplunkLive! Frankfurt 2016 - Helvetia Use Case
SplunkLive! Frankfurt 2016 - Helvetia Use CaseSplunkLive! Frankfurt 2016 - Helvetia Use Case
SplunkLive! Frankfurt 2016 - Helvetia Use CaseSplunk
 
SplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaSplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaSplunk
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlMatthias Niehoff
 
Top 10 Internet Trends 2000
Top 10 Internet Trends 2000Top 10 Internet Trends 2000
Top 10 Internet Trends 2000Jürg Stuker
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Java Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit LiftJava Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit LiftJohannes Hohenbichler
 

Similaire à Concurrency Paradigmen (20)

Einführung in das Actor Model mit Akka.net
Einführung in das Actor Model mit Akka.netEinführung in das Actor Model mit Akka.net
Einführung in das Actor Model mit Akka.net
 
Anwendung von Java Enterprise Edition (J2EE)
Anwendung von Java Enterprise Edition (J2EE)Anwendung von Java Enterprise Edition (J2EE)
Anwendung von Java Enterprise Edition (J2EE)
 
Akka.NET Teil 1 - Verteilte Architektur von Beginn an
Akka.NET Teil 1 - Verteilte Architektur von Beginn anAkka.NET Teil 1 - Verteilte Architektur von Beginn an
Akka.NET Teil 1 - Verteilte Architektur von Beginn an
 
Enterprise JS
Enterprise JS Enterprise JS
Enterprise JS
 
openHAB @ JUG Stuttgart
openHAB @ JUG StuttgartopenHAB @ JUG Stuttgart
openHAB @ JUG Stuttgart
 
Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)Doctrine 2 - An Introduction (German)
Doctrine 2 - An Introduction (German)
 
Distributed Programming in Mozart
Distributed Programming in MozartDistributed Programming in Mozart
Distributed Programming in Mozart
 
Multithreading in c# mit tpl
Multithreading in c# mit tplMultithreading in c# mit tpl
Multithreading in c# mit tpl
 
JPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEJPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SE
 
Concurrency in java
Concurrency in javaConcurrency in java
Concurrency in java
 
SplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaSplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case Helvetia
 
SplunkLive! Frankfurt 2016 - Helvetia Use Case
SplunkLive! Frankfurt 2016 - Helvetia Use CaseSplunkLive! Frankfurt 2016 - Helvetia Use Case
SplunkLive! Frankfurt 2016 - Helvetia Use Case
 
SplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaSplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case Helvetia
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der Wahl
 
Top 10 Internet Trends 2000
Top 10 Internet Trends 2000Top 10 Internet Trends 2000
Top 10 Internet Trends 2000
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Java Magazin - Lift
Java Magazin - LiftJava Magazin - Lift
Java Magazin - Lift
 
Java Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit LiftJava Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit Lift
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 

Plus de Roman Roelofsen

Agile specifications on agile projects
Agile specifications on agile projectsAgile specifications on agile projects
Agile specifications on agile projectsRoman Roelofsen
 
Webanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickelnWebanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickelnRoman Roelofsen
 
Pro Syst Enterprise OSGi
Pro Syst Enterprise OSGiPro Syst Enterprise OSGi
Pro Syst Enterprise OSGiRoman Roelofsen
 
OSGi Release 4.2 - Was ist neu?
OSGi Release 4.2 - Was ist neu?OSGi Release 4.2 - Was ist neu?
OSGi Release 4.2 - Was ist neu?Roman Roelofsen
 
VIB - Very Important Bundles
VIB - Very Important BundlesVIB - Very Important Bundles
VIB - Very Important BundlesRoman Roelofsen
 

Plus de Roman Roelofsen (6)

Agile specifications on agile projects
Agile specifications on agile projectsAgile specifications on agile projects
Agile specifications on agile projects
 
Ajax, Comet & Co.
Ajax, Comet & Co.Ajax, Comet & Co.
Ajax, Comet & Co.
 
Webanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickelnWebanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickeln
 
Pro Syst Enterprise OSGi
Pro Syst Enterprise OSGiPro Syst Enterprise OSGi
Pro Syst Enterprise OSGi
 
OSGi Release 4.2 - Was ist neu?
OSGi Release 4.2 - Was ist neu?OSGi Release 4.2 - Was ist neu?
OSGi Release 4.2 - Was ist neu?
 
VIB - Very Important Bundles
VIB - Very Important BundlesVIB - Very Important Bundles
VIB - Very Important Bundles
 

Concurrency Paradigmen

  • 1. Concurrency Paradigmen Roman Roelofsen Managing Director (aka Alpha Geek) Weigle Wilczek GmbH Twitter: romanroe Java Forum Stuttgart, 7. Juli 2011
  • 2. 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)
  • 3. 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
  • 5. 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
  • 6. 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
  • 7. 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 ...
  • 8. 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
  • 9. 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 ...
  • 10. 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)
  • 11. 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
  • 12. 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 :-)
  • 13. 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;
  • 14. 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); }
  • 15. Nebenl¨ufigkeit - Relevanz Heute a Neues Beispiel Geld von Konto A auf Konto B uberweisen ¨
  • 16. 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(); }
  • 17. Value/Identity/State - Geld uberweisen ¨ L¨sungsversuch 1 o class Konto { public synchronized void abheben(long betrag) { ... } public synchronized void einzahlen(long betrag) { ... } }
  • 18. Value/Identity/State - Geld uberweisen ¨ L¨sungsversuch 2 o synchronized (kontoA) { synchronized (kontoB) { kontoA.abheben(100); kontoB.einzahlen(100); } }
  • 19. Value/Identity/State - Arbeit parallelisieren Java Code Thread 1, Thread 2, Thread 3
  • 20. 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
  • 21. Gentlemen: Choose Your Weapons! Executor Future/Promise Actors STM Data Flow Concurrency
  • 23. Future/Promise Bisher waren unsere Threads ”fire-and-forget” Das Ergebnis wurde nicht verarbeitet Doch wieder Thread.join()? (Igitt!!)
  • 25. 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
  • 26. 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)
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. Clojure - ”Hello John!” (ns hello-john) (def hello "Hello") (defn say-hello [firstname] (println hello firstname "!")) (say-hello "John") >> Hello John !
  • 33. 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
  • 34. 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 }
  • 35. 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
  • 37. 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