+ All Categories
Home > Documents > Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf ·...

Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf ·...

Date post: 20-May-2020
Category:
Upload: others
View: 6 times
Download: 0 times
Share this document with a friend
38
Multicore Programming Reactive Programming Louis-Claude Canon [email protected] Bureau 414C Master 1 computer science – Semester 8 Louis-Claude Canon MCP – Reactive Programming 1 / 38
Transcript
Page 1: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Multicore ProgrammingReactive Programming

Louis-Claude [email protected]

Bureau 414C

Master 1 computer science – Semester 8

Louis-Claude Canon MCP – Reactive Programming 1 / 38

Page 2: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Description

Reactive programming is programming with asynchronous data streams:I Asynchronous like CompleteableFuture.I Data streams like Stream.

Louis-Claude Canon MCP – Reactive Programming 2 / 38

Page 3: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Outline

General Concepts

Reactive Streams

Main Libraries

Summary and References

Louis-Claude Canon MCP – Reactive Programming 3 / 38

Page 4: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

General Concepts

Outline

General Concepts

Reactive Streams

Main Libraries

Summary and References

Louis-Claude Canon MCP – Reactive Programming 4 / 38

Page 5: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

General Concepts

Relation with Existing API

single item multiple items

synchronous T data Stream<T> streamasynchronous Compl.Future<T> fut Publisher<T> pub

I A future/promise is to a value as publishers are to iterables/collections.I Reacting to the completion of multiple futures (asynchronously,

without blocking operation).

Louis-Claude Canon MCP – Reactive Programming 5 / 38

Page 6: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr
Page 7: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

General Concepts

Publish/Subscribe Model

Louis-Claude Canon MCP – Reactive Programming 7 / 38

Page 8: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr
Page 9: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

General Concepts

Overflow Problem

I Too much pressure with push-based methods.I Reactive programming is thus “pull-based” to control the pressure.

Louis-Claude Canon MCP – Reactive Programming 9 / 38

Page 10: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

General Concepts

Backpressure

Asynchronous stream processing with non-blocking backpressure:

Louis-Claude Canon MCP – Reactive Programming 10 / 38

Page 11: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

General Concepts

Other Characteristics

Composable chaining operations (like stream and completablefuture).

Lazy evaluation evaluated as late as possible (like stream).Asynchronous non-blocking operations (like completable future).

Reusable/Cacheable results can be reused (like completable future).Push-based the data source initiates the processing (pull-based for

stream).Message passing data producers exchange messages containing the

data (no shared-memory mechanism).

Louis-Claude Canon MCP – Reactive Programming 11 / 38

Page 12: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

General Concepts

History and Technological Context

I Concepts exist since 1960/1970.I Kind of dataflow programmingI Also called FRP (Functional Reactive Programming): functional, no

side effect, immutable state, pure function.I Related to observer and iterator design patterns.I Close to actor concurrency model.

Louis-Claude Canon MCP – Reactive Programming 12 / 38

Page 13: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

General Concepts

Relation with Reactive Systems

I Reactive programming can be used to build a reactive system.I The Reactive Manifesto states the features that must be offered by a

reactive system: responsive, resilient, elastic, message-driven.

Louis-Claude Canon MCP – Reactive Programming 13 / 38

Page 14: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr
Page 15: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Reactive Streams Flow API (Java 9)

Outline

General Concepts

Reactive StreamsFlow API (Java 9)SubmissionPublisherImplementation Example

Main Libraries

Summary and References

Louis-Claude Canon MCP – Reactive Programming 15 / 38

Page 16: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Reactive Streams Flow API (Java 9)

Main Interfaces

interface Publisher<T> {void subscribe(Subscriber<T> subscriber);

}interface Subscriber<T> {

void onSubscribe(Subscription subscription);void onNext(T item);void onError(Throwable throwable);void onComplete();

}interface Subscription {

void request(long n);void cancel();

}

Louis-Claude Canon MCP – Reactive Programming 16 / 38

Page 17: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr
Page 18: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr
Page 19: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Reactive Streams Flow API (Java 9)

Dual to Iterable

Event Iterable (pull) Observable (push)

retrieve data T next() onNext(T)discover error throws Exception onError(Exception)complete !hasNext() onCompleted()

Louis-Claude Canon MCP – Reactive Programming 19 / 38

Page 20: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Reactive Streams SubmissionPublisher

Outline

General Concepts

Reactive StreamsFlow API (Java 9)SubmissionPublisherImplementation Example

Main Libraries

Summary and References

Louis-Claude Canon MCP – Reactive Programming 20 / 38

Page 21: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Reactive Streams SubmissionPublisher

Interface

Implementation of Flow.Publisher:

SubmissionPublisher()SubmissionPublisher(Executor executor,

int maxBufferCapacity);CompletableFuture<Void> consume(Consumer<T> cons)int submit(T item)void close()

Louis-Claude Canon MCP – Reactive Programming 21 / 38

Page 22: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr
Page 23: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Reactive Streams SubmissionPublisher

Example

var pub = new SubmissionPublisher<Integer>();pub.consume(System.out::println);pub.submit(1);

Louis-Claude Canon MCP – Reactive Programming 23 / 38

Page 24: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr
Page 25: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Reactive Streams Implementation Example

Outline

General Concepts

Reactive StreamsFlow API (Java 9)SubmissionPublisherImplementation Example

Main Libraries

Summary and References

Louis-Claude Canon MCP – Reactive Programming 25 / 38

Page 26: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Reactive Streams Implementation Example

Subscriber Example

class CustomSub implements Subscriber<Integer> {private Subscription subscription;public void onSubscribe(Subscription

subscription) {this.subscription = subscription;subscription.request(1); }

public void onNext(Integer value) {System.out.println(value);subscription.request(1); }

public void onError(Throwable t) {System.err.println(t.getMessage()); }

public void onComplete() {System.out.println("Done!"); }

}

Louis-Claude Canon MCP – Reactive Programming 26 / 38

Page 27: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Reactive Streams Implementation Example

Chaining SubmissionPublisher

var pub1 = new SubmissionPublisher<Integer>();var pub2 = new SubmissionPublisher<Integer>();var pub3 = new SubmissionPublisher<Double>();var pub4 = new SubmissionPublisher<Double>();pub1.consume(x -> { pub2.submit(x * x); });pub1.consume(x -> { pub3.submit(x / 2.); });pub2.consume(x -> {

System.out.println("Square is: " + x); });pub3.consume(x -> { if (x > 2) pub4.submit(x); });pub4.consume(x -> {

System.out.println("Half (> 2) is: " + x); });pub1.submit(3);pub1.submit(5);

Louis-Claude Canon MCP – Reactive Programming 27 / 38

Page 28: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Main Libraries

Outline

General Concepts

Reactive Streams

Main Libraries

Summary and References

Louis-Claude Canon MCP – Reactive Programming 28 / 38

Page 29: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Main Libraries

Main Libraries

RxJava Reactive Extensions, Netflix (more than 50 different operations)Reactor from Spring (equivalent to RxJava)

Akka actor model

Louis-Claude Canon MCP – Reactive Programming 29 / 38

Page 30: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Main Libraries

RxJava Example

Flowable<Integer> flow = Flowable.range(1, 5).map(v -> v * v).filter(v -> v % 3 == 0).subscribe(System.out::println);

I Flowable implements Publisher.I subscribe triggers the execution (as with terminal operations, lazy

evaluation).

Louis-Claude Canon MCP – Reactive Programming 30 / 38

Page 31: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Main Libraries

Marble Diagrams

Louis-Claude Canon MCP – Reactive Programming 31 / 38

Page 32: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Main Libraries

Classic Operations

Louis-Claude Canon MCP – Reactive Programming 32 / 38

Page 33: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Main Libraries

Advanced Operations

Louis-Claude Canon MCP – Reactive Programming 33 / 38

Page 34: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Main Libraries

Concurrency Source

I By default, the main thread performs all operations (blocking).I The operation subscribeOn specifies how data processing can be

processed concurrently.I The operation at each stage can be performed asynchronously on a

specific executor.

Louis-Claude Canon MCP – Reactive Programming 34 / 38

Page 35: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Summary and References

Outline

General Concepts

Reactive Streams

Main Libraries

Summary and References

Louis-Claude Canon MCP – Reactive Programming 35 / 38

Page 36: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Summary and References

Official Documentation

I Documentation of class FlowI Documentation of class SubmissionPublisherI Documentation of class FlowableI Documentation of class Flux

Louis-Claude Canon MCP – Reactive Programming 36 / 38

Page 37: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Summary and References

To Go Further

I https://akarnokd.blogspot.com/I https:

//github.com/reactive-streams/reactive-streams-jvmI Reactive Extensions (Rx) for Java or JavaScript:

I http://reactivex.io/I https://github.com/ReactiveX/RxJavaI http://introtorx.com/I http://xgrommx.github.io/rx-book/I https://gist.github.com/staltz/868e7e9bc2a7b8c1f754

I Reactor:I https://github.com/reactor/reactor-coreI https://spring.io/blog/2016/06/13/

notes-on-reactive-programming-part-ii-writing-some-codeI https://spring.io/blog/2016/07/20/

notes-on-reactive-programming-part-iii-a-simple-http-server-application

Louis-Claude Canon MCP – Reactive Programming 37 / 38

Page 38: Multicore Programming - Reactive Programminglccanon.free.fr/teaching/MCP/Reactive.pdf · MulticoreProgramming ReactiveProgramming Louis-ClaudeCanon louis-claude.canon@univ-fcomte.fr

Summary and References

Other Sources

I http://alexsderkach.io/comparing-java-8-rxjava-reactor/I https://spring.io/blog/2016/06/07/

notes-on-reactive-programming-part-i-the-reactive-landscapeI https://www.hascode.com/2018/01/

reactive-streams-java-9-flow-api-rxjava-and-reactor-examples/I https:

//grokonez.com/java/java-9-flow-api-reactive-streamsI https://www.futurice.com/blog/

top-7-tips-for-rxjava-on-android/I https://medium.com/netflix-techblog/

reactive-programming-in-the-netflix-api-with-rxjava-7811c3a1496aI https://dzone.com/articles/

5-things-to-know-about-reactive-programming

Louis-Claude Canon MCP – Reactive Programming 38 / 38


Recommended