Slide 1

Slide 1 text

Globalcode – Open4education Trilha Java – Computação Paralela Parallel Computing Leonardo Piedade

Slide 2

Slide 2 text

Globalcode – Open4education Evolution of CPUs https://en.wikipedia.org/wiki/Moore's_law “The number of transistors doubles approximately every two years.” – Goordon Moore

Slide 3

Slide 3 text

Globalcode – Open4education In 2000… Intel predicted 10 GHz chips on desktop by 2011 https://www.zdnet.com/article/taking-chips-to-10ghz-and-beyond-5000096055/

Slide 4

Slide 4 text

Globalcode – Open4education More cores, not faster cores Transistors count Frequency wall Number of cores

Slide 5

Slide 5 text

Globalcode – Open4education Concurrent and Parallel Do something else while waiting for… Split a problem into smaller chunks and solve together…

Slide 6

Slide 6 text

Globalcode – Open4education Concurrent and Parallel

Slide 7

Slide 7 text

Globalcode – Open4education Amdahl’s Law https://en.wikipedia.org/wiki/Amdahl's_law How much can we accelerate?

Slide 8

Slide 8 text

Globalcode – Open4education So… What do we have? “If you want to exploit multiple cores with threads and locks, your only choice is to create a concurrent program and then run it on parallel hardware…” – Paul Butcher Globalcode – Open4education So… What do we have? “If you want to exploit multiple cores with threads and locks, your only choice is to create a concurrent program and then run it on parallel hardware…” – Paul Butcher

Slide 9

Slide 9 text

Globalcode – Open4education

Slide 10

Slide 10 text

Globalcode – Open4education Can Java help me? “Yes, we use threads…” Since Java 1.0 - 1996

Slide 11

Slide 11 text

Globalcode – Open4education Use cases… BigData Statistical Applications Crawler Scheduled Tasks Batch Processing Front-end Games Android Non-business Operations Logging Monitoring

Slide 12

Slide 12 text

Globalcode – Open4education Expectation Reality

Slide 13

Slide 13 text

Globalcode – Open4education “Don't do it, if you can avoid it.”

Slide 14

Slide 14 text

Globalcode – Open4education “Houston we have a problem.”

Slide 15

Slide 15 text

Globalcode – Open4education Race Condition https://gist.github.com/lpiedade /71cfba828625b66fcf15b1c7e2 cdaf23

Slide 16

Slide 16 text

Globalcode – Open4education Concurrent API – Java 5 [2004] Atomic Explicit Locks Synchronizers Latches Semaphore Barrier Future Executor ThreadPool Doug Lea, professor at State University of New York

Slide 17

Slide 17 text

Globalcode – Open4education Liveness failure Deadlock Starvation Poor Responsiveness Livelock

Slide 18

Slide 18 text

Globalcode – Open4education Concurrent API – Java 7 [2011] Phaser ForkJoinPool RecursiveAction and RecursiveTask

Slide 19

Slide 19 text

Globalcode – Open4education Thread Pool ThreadPoolExecutor was designed for extension…

Slide 20

Slide 20 text

Globalcode – Open4education Fork/Join Pool

Slide 21

Slide 21 text

Globalcode – Open4education

Slide 22

Slide 22 text

Globalcode – Open4education Concurrent API Java 8 [2014] CompletableFuture But before… Streams

Slide 23

Slide 23 text

Globalcode – Open4education Streams

Slide 24

Slide 24 text

Globalcode – Open4education Parallel Streams

Slide 25

Slide 25 text

Globalcode – Open4education Sequential and Parallel Streams https://docs.oracle.com/javase/tutorial/collections/streams/examples/ParallelismExamples.java

Slide 26

Slide 26 text

Globalcode – Open4education “Measure, don’t guess.”

Slide 27

Slide 27 text

Globalcode – Open4education

Slide 28

Slide 28 text

Globalcode – Open4education Future

Slide 29

Slide 29 text

Globalcode – Open4education Future

Slide 30

Slide 30 text

Globalcode – Open4education Future

Slide 31

Slide 31 text

Globalcode – Open4education CompletableFuture

Slide 32

Slide 32 text

Globalcode – Open4education CompletableFuture

Slide 33

Slide 33 text

Globalcode – Open4education Concurrent API – Java 9 [2017] Flow API http://javasampleapproach.com/java/java-9-flow-submissionpublisher-concrete-publisher Publish-Subscribe Pattern with Flow Control Single basic (helper) implementation available in JDK: SubmissionPublisher

Slide 34

Slide 34 text

Globalcode – Open4education Our Concurrent Past; Our Distributed Future

Slide 35

Slide 35 text

Globalcode – Open4education

Slide 36

Slide 36 text

Globalcode – Open4education Reactive Manifesto https://www.reactivemanifesto.org/

Slide 37

Slide 37 text

Globalcode – Open4education Reactive Streams The purpose of Reactive Streams (.ORG) is to provide a standard for asynchronous stream processing with non- blocking backpressure Reactive Systems: – process a potentially unbounded number of elements – in sequence, – asynchronously passing elements between components, – with mandatory non-blocking back-pressure. http://www.reactive-streams.org/

Slide 38

Slide 38 text

Globalcode – Open4education

Slide 39

Slide 39 text

Globalcode – Open4education Akka Actor Model Back-pressure using dynamic Push/Pull It uses ForkJoinPool Prefer immutable messages

Slide 40

Slide 40 text

Globalcode – Open4education Akka - Actor Aspects: • Mailbox • State (FSM) • Behavior

Slide 41

Slide 41 text

Globalcode – Open4education

Slide 42

Slide 42 text

Globalcode – Open4education

Slide 43

Slide 43 text

Globalcode – Open4education “Programming clouds of machines will become as easy as multi-core.” – Joe Duffy

Slide 44

Slide 44 text

Globalcode – Open4education Some books…

Slide 45

Slide 45 text

Globalcode – Open4education …and other books

Slide 46

Slide 46 text

Globalcode – Open4education Go further Java EE Concurrency Utilities Keyword volatile Class sun.misc.Unsafe Concurrency Random Numbers Java Memory Model Blocking Queues OpenJDK – Project Loom Thread Leak Fibers MapReduce Lock Contention CSP – Communication Sequential Processes Antipattern Double-checked-locking STM – Software Transactional Memory Pattern LMAX / Disruptor Parallel Universe - Quasar

Slide 47

Slide 47 text

linkedin.com/in/leoap github.com/lpiedade [email protected]