Concurrency in java

3,056 views

Published on

Published in: Technology, News & Politics
  • Be the first to comment

  • Be the first to like this

Concurrency in java

  1. 1. PROGRAMMING FOR CONCURRENCY In Java
  2. 2. WOZU?CPUs haben mehrere Kernem2b Server: 8 virtuelleDualcores in kommendenmobilen GerätenRechenleistung nutzbar machenvgl. Kaffee kochen
  3. 3. OPTIMIERUNGENWarnung: „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. 4. GUTE NACHRICHTMultiprocessing 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, ...)
  5. 5. DREI VARIANTENSingle threadedDual threaded UI mit WorkerMassiv parallel Große Datenmengen Grafikverarbeitung, AI, Data Mining
  6. 6. BUILDING BLOCKSProzesse besitzt eigenen privaten Speicherbereich (!) Ein Programm ist meist genau ein ProzessThreads gehören zu einem Prozess mehrere Threads teilen sich Speicher
  7. 7. EINFACHES BEISPIEL Java Class: Thread run() und start() Java Interface: Runnable kann an Thread übergeben werden
  8. 8. PARALLELE FEHLERThread Interference bislang korrekter Code wird fehlerhaftMemory Consistency Annahmen über Speicherzustände stimmen nicht mehr(Deadlocks) Threads blockieren sich gegenseitig
  9. 9. SYNCHRONIZEEntwickler ist für Synchronisierungverantwortlich Designfehlersynchronized heißt: nur ein Threadsynchronized(Object)Parallele Performance
  10. 10. KOMPLEXITÄT++Optimales Locking Mehr Parallelität komplexervolatile atomic read/write nicht ausreichend
  11. 11. HILFENZustandsraum kleinhaltenImmutable Objects keine korrupten Zustände
  12. 12. HILFENKontrollierbare Anzahl Threads Thread Pool / Worker / Jobs Webserver Prinzipjava.util.concurrent.Executorsjava.util.concurrent.ThreadPoolExecutor
  13. 13. CALLABLEPool mit 3 ThreadsCallable als kleiner JobFuture<Integer>Immutable
  14. 14. SUCCESS STORYMapReduce funktionale Denkweise parallelisierung ist unabhängig
  15. 15. SUCCESS STORY 2Grafikberechnungen 800 SPUs (Radeon HD 4850)Cuda & OpenCL Rechenkernel Große Datenmengen > 1 TFLOP/s
  16. 16. FAZITRegeln zur Optimierung geltenZustandsraum klein halten (Immutable)An erfolgreichen Architekturen orientierenSingle-Thread Optimierungen haben Vorrang Java -> C vs. Single -> Multicore |CPUs| ist Maximum

×