Slide 1

Slide 1 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA YIFAN XING - 2018 ASYNCHRONOUS PROGRAMMING Yifan Xing SCALA.CONCURRENT AND MONIX! @yifan_xing_e

Slide 2

Slide 2 text

01 Synchronous vs. Asynchronous Differences Futures & Promises Debugging Async Programs Monix A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA 02 03 04 05 Overview ASYNCHRONOUS PROGRAMMING: SCALA.CONCURRENT AND MONIX! 1

Slide 3

Slide 3 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Concurrency Synchronous Asynchronous Single-threaded Multi-threaded YIFAN XING - 2018 @yifan_xing_e 2

Slide 4

Slide 4 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Synchronous: Single-threaded YIFAN XING - 2018 Task 1 Task 2 Task 3 @yifan_xing_e 3

Slide 5

Slide 5 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Synchronous: Multi-threaded YIFAN XING - 2018 Task 1 Task 2 Task 3 @yifan_xing_e 4

Slide 6

Slide 6 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Asynchronous: Single-threaded YIFAN XING - 2018 Task 1 Task 2 Task 3 @yifan_xing_e 5

Slide 7

Slide 7 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Asynchronous: Multi-threaded YIFAN XING - 2018 Task 1 Task 2 Task 3 @yifan_xing_e 6

Slide 8

Slide 8 text

Future Promise ExecutionContext Examples Scala.concurrent

Slide 9

Slide 9 text

YIFAN XING - 2018 Scala.concurrent: Future Computation Incomplete: Computation Completed: Future is not completed Future is completed: with a Value => Success Future is completed: with an Exception => Failure An object holding a value which may become available at some point Immutable A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e Future 7

Slide 10

Slide 10 text

YIFAN XING - 2018 Example: Callbacks Multiple callbacks may be registered; NO guarantee that they will be executed in a particular order. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 8

Slide 11

Slide 11 text

YIFAN XING - 2018 Example: Callbacks Multiple callbacks may be registered; NO guarantee that they will be executed in a particular order. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 8

Slide 12

Slide 12 text

YIFAN XING - 2018 Example: Callbacks Multiple callbacks may be registered; NO guarantee that they will be executed in a particular order. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 8

Slide 13

Slide 13 text

YIFAN XING - 2018 Example: Callbacks Multiple callbacks may be registered; NO guarantee that they will be executed in a particular order. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 8

Slide 14

Slide 14 text

YIFAN XING - 2018 Example: Callbacks Chain callbacks Allow one to enforce callbacks to be executed in a specified order. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 9

Slide 15

Slide 15 text

YIFAN XING - 2018 Example: Callbacks Chain callbacks Allow one to enforce callbacks to be executed in a specified order. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 9

Slide 16

Slide 16 text

YIFAN XING - 2018 Example: Callbacks A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e Exception in callback: NOT propagated to the subsequent andThen callbacks. 10

Slide 17

Slide 17 text

YIFAN XING - 2018 Example: Transformations A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 11

Slide 18

Slide 18 text

YIFAN XING - 2018 Example: Transformations A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 11

Slide 19

Slide 19 text

YIFAN XING - 2018 Example: Transformations A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 12

Slide 20

Slide 20 text

YIFAN XING - 2018 Example: Transformations A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 13

Slide 21

Slide 21 text

YIFAN XING - 2018 Example: Transformations More generic & flexible A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 14

Slide 22

Slide 22 text

YIFAN XING - 2018 Example: Transformations More generic & flexible A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 14

Slide 23

Slide 23 text

YIFAN XING - 2018 Example: Transformations More generic & flexible A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 14

Slide 24

Slide 24 text

YIFAN XING - 2018 Example: Transformations More generic & flexible A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 14

Slide 25

Slide 25 text

YIFAN XING - 2018 Example: Transformations More generic & flexible A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 14

Slide 26

Slide 26 text

YIFAN XING - 2018 Example: Transformations If no match cases or original future contains a valid result: New future will contain the same result as the original one. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e Evaluated only after a Failure 15

Slide 27

Slide 27 text

YIFAN XING - 2018 Example: Transformations If no match cases or original future contains a valid result: New future will contain the same result as the original one. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e Evaluated only after a Failure 15

Slide 28

Slide 28 text

YIFAN XING - 2018 Example: Transformations If no match cases or original future contains a valid result: New future will contain the same result as the original one. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e Evaluated only after a Failure 15

Slide 29

Slide 29 text

YIFAN XING - 2018 Example: Transformations If no match cases or original future contains a valid result: New future will contain the same result as the original one. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e Evaluated only after a Failure 15

Slide 30

Slide 30 text

YIFAN XING - 2018 Example: Transformations If both futures failed, the resulting future holds the throwable object of the first future. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 16

Slide 31

Slide 31 text

YIFAN XING - 2018 Example: Transformations If both futures failed, the resulting future holds the throwable object of the first future. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 16

Slide 32

Slide 32 text

YIFAN XING - 2018 Example: Transformations A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 16 If both futures failed, the resulting future holds the throwable object of the first future.

Slide 33

Slide 33 text

YIFAN XING - 2018 Scala.concurrent: Promises A writable, single-assignment container Can create a Future Can complete a Future, only ONCE A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e Promise: 17

Slide 34

Slide 34 text

YIFAN XING - 2018 Example: Promises A Promise can be completed at most ONCE. If the promise has already been fulfilled, failed or has timed out, calling this method will throw an IllegalStateException. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 18

Slide 35

Slide 35 text

YIFAN XING - 2018 Example: Promises A Promise can be completed at most ONCE. If the promise has already been fulfilled, failed or has timed out, calling this method will throw an IllegalStateException. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 18

Slide 36

Slide 36 text

YIFAN XING - 2018 Example: Promises A Promise can be completed at most ONCE. If the promise has already been fulfilled, failed or has timed out, calling this method will throw an IllegalStateException. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 18

Slide 37

Slide 37 text

YIFAN XING - 2018 Example: Promises If the promise has already been completed returns false, or true otherwise. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 19

Slide 38

Slide 38 text

YIFAN XING - 2018 Example: Promises If the promise has already been completed returns false, or true otherwise. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 19

Slide 39

Slide 39 text

YIFAN XING - 2018 Example: Promises If the promise has already been completed returns false, or true otherwise. A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA @yifan_xing_e 19

Slide 40

Slide 40 text

YIFAN XING - 2018 A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Building A Client-facing Interface @yifan_xing_e 20

Slide 41

Slide 41 text

YIFAN XING - 2018 A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA p.future Problem in A Client-facing Interface @yifan_xing_e 21

Slide 42

Slide 42 text

YIFAN XING - 2018 Monix @yifan_xing_e

Slide 43

Slide 43 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA What is Monix? Asynchronous, event-based programs Data type: Task, etc. "Factory" of Future instances Lazy & asynchronous computations YIFAN XING - 2018 @yifan_xing_e 22

Slide 44

Slide 44 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Task YIFAN XING - 2018 Lazily evaluated Evaluated when call runAsync Trigger side effects @yifan_xing_e 23

Slide 45

Slide 45 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Task YIFAN XING - 2018 Lazily evaluated Evaluated when call runAsync Trigger side effects @yifan_xing_e 23

Slide 46

Slide 46 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Task YIFAN XING - 2018 Lazily evaluated Evaluated when call runAsync Trigger side effects @yifan_xing_e 23

Slide 47

Slide 47 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Task Callback YIFAN XING - 2018 Eagerly evaluate task Register callbacks Similar to Future#onComplete @yifan_xing_e 24

Slide 48

Slide 48 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Task Callback YIFAN XING - 2018 Eagerly evaluate task Register callbacks Similar to Future#onComplete @yifan_xing_e 24

Slide 49

Slide 49 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Task Callback YIFAN XING - 2018 Eagerly evaluate task Register callbacks Similar to Future#onComplete @yifan_xing_e 24

Slide 50

Slide 50 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Eager/ Lazy YIFAN XING - 2018 Evaluate eagerly Equivalent to Future#successful Defer eager evaluation Similar to Task#eval @yifan_xing_e 25

Slide 51

Slide 51 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Eager/ Lazy YIFAN XING - 2018 Evaluate eagerly Equivalent to Future#successful Defer eager evaluation Similar to Task#eval @yifan_xing_e 25

Slide 52

Slide 52 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Memoization YIFAN XING - 2018 Evaluated lazily Not memoized, recompute each time the Task is executed. Evaluate lazily Evaluated exactly ONCE Result is memoized @yifan_xing_e 26

Slide 53

Slide 53 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Memoization YIFAN XING - 2018 Evaluated lazily Not memoized, recompute each time the Task is executed. Evaluate lazily Evaluated exactly ONCE Result is memoized @yifan_xing_e 26

Slide 54

Slide 54 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: MemoizeOnSuccess YIFAN XING - 2018 Exceptions are not cached. Only cache the first successful result @yifan_xing_e 27

Slide 55

Slide 55 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: MemoizeOnSuccess YIFAN XING - 2018 Exceptions are not cached. Only cache the first successful result @yifan_xing_e 27

Slide 56

Slide 56 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: MemoizeOnSuccess YIFAN XING - 2018 Exceptions are not cached. Only cache the first successful result @yifan_xing_e 27

Slide 57

Slide 57 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Alternative Thread Pool YIFAN XING - 2018 Overrides default scheduler Overriding the "default" scheduler can only happen ONCE Task is immutable @yifan_xing_e 28

Slide 58

Slide 58 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Alternative Thread Pool YIFAN XING - 2018 Overrides default scheduler Overriding the "default" scheduler can only happen ONCE Task is immutable @yifan_xing_e 28

Slide 59

Slide 59 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: Alternative Thread Pool YIFAN XING - 2018 Overrides default scheduler Overriding the "default" scheduler can only happen ONCE Task is immutable @yifan_xing_e 28

Slide 60

Slide 60 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Monix: CancelableFuture YIFAN XING - 2018 Calling it multiple times has the same side- effect as calling it only once. @yifan_xing_e 29

Slide 61

Slide 61 text

- A value - Executed when constructed - Eager evaluation - ExecutionContext needed whenever use operators A function - Execution controllable by user - Lazy evaluation - ExecutionScheduler needed whenever - use runAsync Monix Future Eager/Lazy A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA 30

Slide 62

Slide 62 text

- Memoized by default - Evaluated once - Store result Explicitly use memoization operators - Evaluated whenever needed - Referential transparency - Monix Future Memoization A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA 31

Slide 63

Slide 63 text

- Sometimes errors are not propagated - Override reportFailure in provided ExecutionContext to control output of unpropagated exceptions Scheduler.reportFailure - Defaults to System.err - Allow customized logging tools - Monix Future ErrorHandling A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA 32

Slide 64

Slide 64 text

Future Monix A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA 33

Slide 65

Slide 65 text

Future Monix A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA 34

Slide 66

Slide 66 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Debugging BEST PRACTICES In Asynchronous Programs @yifan_xing_e

Slide 67

Slide 67 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA 35

Slide 68

Slide 68 text

Writing Async Code 1. Rethink before adding more code 2. Adding more code to fix problems will usually add more bugs D e b u g 1. Test code in isolation 2. Observe what is happening 3. Confirm behavior before moving on T e s t 36

Slide 69

Slide 69 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Using Await & Print YIFAN XING - 2018 @yifan_xing_e TimeoutException if after waiting for the specified time awaitable is still not ready atMost may be: A finite positive duration Negative (no waiting is done) Duration.Inf for unbounded waiting 37

Slide 70

Slide 70 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Using Await & Print YIFAN XING - 2018 @yifan_xing_e TimeoutException if after waiting for the specified time awaitable is still not ready atMost may be: A finite positive duration Negative (no waiting is done) Duration.Inf for unbounded waiting 37

Slide 71

Slide 71 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA ScalaTest: ScalaFutures YIFAN XING - 2018 @yifan_xing_e Default timeout 150ms TestFailedException if not finished after timeout 38

Slide 72

Slide 72 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA ScalaTest: ScalaFutures YIFAN XING - 2018 @yifan_xing_e Default timeout 150ms TestFailedException if not finished after timeout 38

Slide 73

Slide 73 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA ScalaTest: ScalaFutures YIFAN XING - 2018 @yifan_xing_e Default timeout 150ms TestFailedException if not finished after timeout 38

Slide 74

Slide 74 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Resources: Async Debugger & Capture YIFAN XING - 2018 @yifan_xing_e IntelliJ Capture (2017): Iulian Dragos - Async Debugger in Scala IDE IntelliJ IDEA 2017.1 EAP Extends Debugger with Async Stacktraces Developer's Explanation Debugging Tutorial Async Stacktraces Stack Retention Scala IDE Doc Demo: Jamie Allen Rethink the Debugger: Scala Days 2014 39

Slide 75

Slide 75 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA Using Async Debugger / Capture YIFAN XING - 2018 @yifan_xing_e Substituting its parts related to the asynchronous code execution with where it was called Sender: Async code executor Receiver: executed code Config exact signatures of methods of the async code Stores the stack and variables info in a map (1000 stacks), where the key is a parameter with the specified number. 40

Slide 76

Slide 76 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA YIFAN XING - 2018 @yifan_xing_e ( Sorry Alex :P ) 41

Slide 77

Slide 77 text

A TOUR OF ASYNCHRONOUS PROGRAMMING IN SCALA YIFAN XING - 2018 @yifan_xing_e 42

Slide 78

Slide 78 text

T H A N K Y O U @yifan_xing_e