2. WOZU?
CPUs haben mehrere Kerne
m2b Server: 8 virtuelle
Dualcores in kommenden
mobilen Geräten
Rechenleistung nutzbar machen
vgl. Kaffee kochen
3. OPTIMIERUNGEN
Warnung: „The root of all evil“ (Donald Knuth)
Multiprocessing bringt neue Komplexitätsdimension
Bugtracking wird sehr sehr schwer
Vorher korrekter Code kann nun fehlerhaft sein
Performance kann schlechter werden (synchronisieren)
Deswegen: Notwendigkeit durch Profiling „beweisen“
4. GUTE NACHRICHT
Multiprocessing wird uns geschenkt in
Application Server (pro Request)
Multi-Prozess Umgebung (Tomcat, MySQL, ...)
Libraries (nicht unser Problem)
High Level Programmierung (Garbage Collector, JIT)
Und einfacher gemacht durch
Gute Frameworks (GCD, OpenCL, ...)
6. BUILDING BLOCKS
Prozesse
besitzt eigenen privaten Speicherbereich (!)
Ein Programm ist meist genau ein Prozess
Threads
gehören zu einem Prozess
mehrere Threads teilen sich Speicher
7. EINFACHES BEISPIEL
Java Class: Thread
run() und start()
Java Interface: Runnable
kann an Thread übergeben
werden
8. PARALLELE FEHLER
Thread Interference
bislang korrekter Code wird fehlerhaft
Memory Consistency
Annahmen über Speicherzustände stimmen nicht mehr
(Deadlocks)
Threads blockieren sich gegenseitig
9. SYNCHRONIZE
Entwickler ist für Synchronisierung
verantwortlich
Designfehler
synchronized heißt: nur ein Thread
synchronized(Object)
Parallele Performance
18. FAZIT
Regeln zur Optimierung gelten
Zustandsraum klein halten (Immutable)
An erfolgreichen Architekturen orientieren
Single-Thread Optimierungen haben Vorrang
Java -> C vs. Single -> Multicore
|CPUs| ist Maximum