SlideShare a Scribd company logo
September 2–3, 2020
Springone.Io
1
🤨
RETRY
TIMEOUTS&CANCEL,
✋♻⌛KeepYour Sanity Thanks to Reactive Programming
The Infamous
Request-Response
The Infamous
Request-Response
In an Imperative Blocking World
Response result = makeRequest();
🙂🖥 🌎
5
❓
🙂🖥 🌎
6
🤖
❓
🙂🖥 🌎
7
🤖
❓
🤨
😒🖥 🌎
8
⏱ 🤖
❗
😠🖥 🌎
9
🤖
❗
⏱
😡🖥 🌎
10
🤖
❗
😡🖥 🌎
11
❗
Once you've made the request,
you're blocked waiting for the response
12
Demo
Going
Asynchronous
Future<Response> future = makeRequest();
🙂🖥 🌎
16
❓
🙂🖥 🌎
17
🤖
❓
🙂🖥 🌎
18
🤖
❓
🙂🖥 🌎
🤖
❓
19
🤨
🙂🖥 🌎
20
🤖
❓
🤨✋
With an asynchronous call
you can cancel
21
Future<Response> future = makeRequest();
Future<Response> future = makeRequest();
future.cancel();
Demo
What if the Request
Is More Complex?
What if the Request
Is More Complex?
Sequence of Multiple Calls
CompletableFuture<List<String>> fids = findIds();
List<String> ids = fids.get();
CompletableFuture<Response> nextResult;
for (String id : ids) {
nextResult = makeRequest(id);
if (userCancelled) {
nextResult.cancel(true);
}
}
CompletableFuture<List<String>> fids = findIds();
List<String> ids = fids.get();
CompletableFuture<Response> nextResult;
for (String id : ids) {
nextResult = makeRequest(id);
if (userCancelled) {
nextResult.cancel(true);
}
}
🙂🖥 🌎
29
❓
🙂🖥 🌎
30
🤖
❓
🙂🖥 🌎
31
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🙂🖥 🌎
32
🤨
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🙂🖥 🌎
33
🤨
✋ 🤖
❓
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🙂🖥 🌎
34
🤨
✋
🤖
❓
🤖
❓
🤖
❓
🤖
❓
😒🖥 🌎
35
✋
🤖
❓
🤖
❓
🤖
❓
😠🖥 🌎
36
✋
🤖
❓
🤖
❓
😡🖥 🌎
37
✋
🤖
❓
cancelling gets more complex
38
(yes, that code can be further composed into
a single CompletableFuture)
39
Enter Reactive
Programming
This Looks Like a Perfect Case for Mono
Mono<List<Value>> results = findIds() //Flux<String>
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id)) //Flux<Response>
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r)) //Flux<Value>
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList(); //Mono<List<Value>>
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results.subscribe();
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results.subscribe();
d.dispose();
🙂🖥 🌎
47
❓
🙂🖥 🌎
48
🤖
❓
🙂🖥 🌎
49
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🙂🖥 🌎
50
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🙂🖥 🌎
51
🤨
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🙂🖥 🌎
52
🤨
✋ 🤖
❓
🤖
❓
🤖
❓
🤖
❓
🤖
❓
😁🖥 🌎
53
Demo
A Word About
Timeouts
Classic Solutions
Classic Solution 1
provide a maximum duration
56
//budget=5s
makeRequest(uri, 5, TimeUnit.SECONDS);
Passing a maximum duration
doesn't compose and lacks abstraction
58
Passing a maximum duration
is often too fine grained to be useful to users
59
eg. timeout on an inner request
vs the whole user interaction
60
//budget=5s
long timeout = 5;
TimeUnit unit = TimeUnit.SECONDS;
//what if each of these can take up to 5s??
makeRequest(uri1, timeout, unit);
makeRequest(uri2, timeout, unit);
file.write(timeout, unit);
Classic Solution 2
passing a deadline around
62
//budget=5s
makeRequest(uri,2020-01-01T20:30:02.123);
//budget=5s
//each of these are constrained by same deadline
makeRequest(uri1, 2020-01-01T20:30:02.123);
makeRequest(uri2, 2020-01-01T20:30:02.123);
file.write(2020-01-01T20:30:02.123);
Passing a deadline around
composes well BUT...
65
Passing a deadline around
composes well BUT...
66
Passing a deadline around
composes well but
67
leaks in the API
Passing a deadline around
composes well but
68
forces the effort on the user
i.e. boilerplate conversion and
passing around of deadline
at every level
69
//budget=5s
//extracting these into a method...
makeRequest(uri1, 2020-01-01T20:30:02.123);
makeRequest(uri2, 2020-01-01T20:30:02.123);
file.write(2020-01-01T20:30:02.123);
//...deadline concept leaks into the API
void process(ZonedDateTime deadline) {
makeRequest(uri1, deadline);
makeRequest(uri2, deadline);
file.write(deadline);
}
//thus it is up to the user to compute deadline
ZonedDateTime deadline = ZonedDateTime
.now()
.plus(Duration.ofSeconds(5));
Passing a deadline around
is thus less practical
72
Enter Reactive
Programming
This Looks Like a Perfect Case for Timeout Operator
Mono<Void> process = makeRequest(uri1)
.then(makeRequest(uri2))
.then(writeFile());
Disposable d = process
.subscribe();
Mono<Void> process = makeRequest(uri1)
.then(makeRequest(uri2))
.then(writeFile());
Disposable d = process
.timeout(Duration.ofSeconds(5))
.subscribe();
Mono<Void> process = makeRequest(uri1)
.then(makeRequest(uri2))
.then(writeFile());
Disposable d = process
.timeout(Duration.ofSeconds(5))
.subscribe();
timeout on
the whole
Mono<Void> process = makeRequest(uri1)
.then(makeRequest(uri2))
.then(writeFile());
Disposable d = process
.timeout(Duration.ofSeconds(5))
.subscribe();
still manually
cancellable
Ease of use with Duration,
yet composable and fine grained
78
back to Mono<List<Value>> example
79
Mono<List<Value>> results = findIds()
.flatMap(id ->
makeRequest(id)
).map(r -> extractBody(r)).collectList();
Disposable d = results
.subscribe();
Mono<List<Value>> results = findIds()
.flatMap(id ->
makeRequest(id)
).map(r -> extractBody(r)).collectList();
Disposable d = results
.timeout(Duration.ofSeconds(5))
.subscribe();
add timeout on
the whole operation
Mono<List<Value>> results = findIds()
.flatMap(id ->
makeRequest(id)
.timeout(Duration.ofSeconds(1))
).map(r -> extractBody(r)).collectList();
Disposable d = results
.timeout(Duration.ofSeconds(5))
.subscribe();
each inner request
has own timeout
add timeout on
the whole operation
🙂🖥 🌎
83
❓
🙂🖥 🌎
84
❓
🤖⏳
🙂🖥 🌎
85
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🤖
❓
⏳
🙂🖥 🌎
86
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🤖
❓
⏳
🙂🖥 🌎
87
🤖
❓
🤖
❓
🤖
❓
🤖
❓
🤖
❓
⏳⏳
⌛⌛❗
🙂🖥 🌎
88
⌛❗
🙂🖥 🌎
89
⌛❗
🙃🖥 🌎
90
⌛❗
Demo
And if I Want To
Retry?
Retry on what?
93
eg. remote failures?
94
What if I want to
combine with timeouts?
95
And can I keep the whole thing
cancellable?
96
AND apply an exponential backoff?
97
Just Combine
ONE MORE
Operator!
This Looks Like a Perfect Case for retryWhen Operator
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.timeout(Duration.ofSeconds(5))
.subscribe();
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.timeout(Duration.ofSeconds(5))
.subscribe();
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.timeout(Duration.ofSeconds(5))
.subscribe();
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.timeout(Duration.ofSeconds(5))
.subscribe();
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.timeout(Duration.ofSeconds(5))
.subscribe();
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.timeout(Duration.ofSeconds(5))
.subscribe();
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.timeout(Duration.ofSeconds(5))
.subscribe();
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.timeout(Duration.ofSeconds(5))
.subscribe();
retry
on remote
errors only
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.timeout(Duration.ofSeconds(5))
.subscribe();
still manually
cancellable
still timeout on
the whole
Position matters
108
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.timeout(Duration.ofSeconds(5))
.subscribe();
retries
with a global
timeout
Mono<List<Value>> results = findIds()
.flatMap(id -> makeRequest(id))
.map(r -> extractBody(r))
.collectList();
Disposable d = results
.timeout(Duration.ofSeconds(5))
.retryWhen(backoff(5, Duration.ofMillis(10))
.maxBackoff(Duration.ofSeconds(1))
.jitter(0.4))
.subscribe();
vs timeout
on each
attempt
Demo
THANKS👍
Questions❓Join the Virtual Hallway Room To Chat
@SimonBasle
@ProjectReactor

More Related Content

What's hot

Agile vs waterfall
Agile vs waterfallAgile vs waterfall
Agile vs waterfall
gosain20
 
Chaos Engineering with Gremlin Platform
Chaos Engineering with Gremlin PlatformChaos Engineering with Gremlin Platform
Chaos Engineering with Gremlin Platform
Anshul Patel
 
Drivers and the miniscript
Drivers and the miniscriptDrivers and the miniscript
Drivers and the miniscript
Manu Melwin Joy
 
Scrum
ScrumScrum
Scrum
Sujoy Saha
 
SRE-iously! Reliability!
SRE-iously! Reliability!SRE-iously! Reliability!
SRE-iously! Reliability!
New Relic
 
CI/CD
CI/CDCI/CD
CI/CD
AmitDhodi
 
Scrum Guide In One Slide
Scrum Guide In One SlideScrum Guide In One Slide
Scrum Guide In One Slide
Moisés Armani Ramírez
 
What is Agility - Transforming to become an Agile Organization in the Digital...
What is Agility - Transforming to become an Agile Organization in the Digital...What is Agility - Transforming to become an Agile Organization in the Digital...
What is Agility - Transforming to become an Agile Organization in the Digital...
Richard Ellis PMP PRM CSM PMI-ACP SSGB
 
Agile Team Working Agreements
Agile Team Working AgreementsAgile Team Working Agreements
Agile Team Working Agreements
Payton Consulting
 
Measuring the Performance of a Scrum Master
Measuring the Performance of a Scrum MasterMeasuring the Performance of a Scrum Master
Measuring the Performance of a Scrum Master
Stephanie Gasche
 
Agile Introduction - Scrum Framework
Agile Introduction - Scrum FrameworkAgile Introduction - Scrum Framework
Agile Introduction - Scrum Framework
Kshitij Yelkar MBA/PMP/CSM/ICP-ACC
 
The 12 Agile Principles
The 12 Agile PrinciplesThe 12 Agile Principles
The 12 Agile Principles
Agile201
 
Enterprise Agile Coaching - Professional Agile Coaching #3
Enterprise Agile Coaching - Professional Agile Coaching #3Enterprise Agile Coaching - Professional Agile Coaching #3
Enterprise Agile Coaching - Professional Agile Coaching #3
Cprime
 
Scrum - Von traditionellen Ansaetzen zu agilen Methoden wie Scrum
Scrum - Von traditionellen Ansaetzen zu agilen Methoden wie ScrumScrum - Von traditionellen Ansaetzen zu agilen Methoden wie Scrum
Scrum - Von traditionellen Ansaetzen zu agilen Methoden wie Scrum
Ralf Ohlenbostel
 
Agile vs. waterfall - The fundamentals differences
Agile vs. waterfall - The fundamentals differencesAgile vs. waterfall - The fundamentals differences
Agile vs. waterfall - The fundamentals differences
David Tzemach
 
Introduction to Chaos Engineering with Microsoft Azure
Introduction to Chaos Engineering with Microsoft AzureIntroduction to Chaos Engineering with Microsoft Azure
Introduction to Chaos Engineering with Microsoft Azure
Ana Medina
 
Building a CICD pipeline for deploying to containers
Building a CICD pipeline for deploying to containersBuilding a CICD pipeline for deploying to containers
Building a CICD pipeline for deploying to containers
Amazon Web Services
 
Netflix - Freedom & Responsibility
Netflix - Freedom & ResponsibilityNetflix - Freedom & Responsibility
Netflix - Freedom & Responsibility
Chris Ellis
 
CICD with Jenkins
CICD with JenkinsCICD with Jenkins
The Lego Kanban Game
The Lego Kanban GameThe Lego Kanban Game
The Lego Kanban Game
Liz Keogh
 

What's hot (20)

Agile vs waterfall
Agile vs waterfallAgile vs waterfall
Agile vs waterfall
 
Chaos Engineering with Gremlin Platform
Chaos Engineering with Gremlin PlatformChaos Engineering with Gremlin Platform
Chaos Engineering with Gremlin Platform
 
Drivers and the miniscript
Drivers and the miniscriptDrivers and the miniscript
Drivers and the miniscript
 
Scrum
ScrumScrum
Scrum
 
SRE-iously! Reliability!
SRE-iously! Reliability!SRE-iously! Reliability!
SRE-iously! Reliability!
 
CI/CD
CI/CDCI/CD
CI/CD
 
Scrum Guide In One Slide
Scrum Guide In One SlideScrum Guide In One Slide
Scrum Guide In One Slide
 
What is Agility - Transforming to become an Agile Organization in the Digital...
What is Agility - Transforming to become an Agile Organization in the Digital...What is Agility - Transforming to become an Agile Organization in the Digital...
What is Agility - Transforming to become an Agile Organization in the Digital...
 
Agile Team Working Agreements
Agile Team Working AgreementsAgile Team Working Agreements
Agile Team Working Agreements
 
Measuring the Performance of a Scrum Master
Measuring the Performance of a Scrum MasterMeasuring the Performance of a Scrum Master
Measuring the Performance of a Scrum Master
 
Agile Introduction - Scrum Framework
Agile Introduction - Scrum FrameworkAgile Introduction - Scrum Framework
Agile Introduction - Scrum Framework
 
The 12 Agile Principles
The 12 Agile PrinciplesThe 12 Agile Principles
The 12 Agile Principles
 
Enterprise Agile Coaching - Professional Agile Coaching #3
Enterprise Agile Coaching - Professional Agile Coaching #3Enterprise Agile Coaching - Professional Agile Coaching #3
Enterprise Agile Coaching - Professional Agile Coaching #3
 
Scrum - Von traditionellen Ansaetzen zu agilen Methoden wie Scrum
Scrum - Von traditionellen Ansaetzen zu agilen Methoden wie ScrumScrum - Von traditionellen Ansaetzen zu agilen Methoden wie Scrum
Scrum - Von traditionellen Ansaetzen zu agilen Methoden wie Scrum
 
Agile vs. waterfall - The fundamentals differences
Agile vs. waterfall - The fundamentals differencesAgile vs. waterfall - The fundamentals differences
Agile vs. waterfall - The fundamentals differences
 
Introduction to Chaos Engineering with Microsoft Azure
Introduction to Chaos Engineering with Microsoft AzureIntroduction to Chaos Engineering with Microsoft Azure
Introduction to Chaos Engineering with Microsoft Azure
 
Building a CICD pipeline for deploying to containers
Building a CICD pipeline for deploying to containersBuilding a CICD pipeline for deploying to containers
Building a CICD pipeline for deploying to containers
 
Netflix - Freedom & Responsibility
Netflix - Freedom & ResponsibilityNetflix - Freedom & Responsibility
Netflix - Freedom & Responsibility
 
CICD with Jenkins
CICD with JenkinsCICD with Jenkins
CICD with Jenkins
 
The Lego Kanban Game
The Lego Kanban GameThe Lego Kanban Game
The Lego Kanban Game
 

Similar to Cancel, Retry and Timeouts: Keep Your Sanity Thanks to Reactive Programming

Building resilient applications
Building resilient applicationsBuilding resilient applications
Building resilient applications
Nuno Caneco
 
Node.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitter
Simen Li
 
Advanced patterns in asynchronous programming
Advanced patterns in asynchronous programmingAdvanced patterns in asynchronous programming
Advanced patterns in asynchronous programming
Michael Arenzon
 
What the CRaC - Superfast JVM startup
What the CRaC - Superfast JVM startupWhat the CRaC - Superfast JVM startup
What the CRaC - Superfast JVM startup
Gerrit Grunwald
 
360|Flex Greenthreading In Flex
360|Flex Greenthreading In Flex360|Flex Greenthreading In Flex
360|Flex Greenthreading In Flex
Huyen Tue Dao
 
Reutov, yunusov, nagibin random numbers take ii
Reutov, yunusov, nagibin   random numbers take iiReutov, yunusov, nagibin   random numbers take ii
Reutov, yunusov, nagibin random numbers take ii
DefconRussia
 
Random numbers
Random numbersRandom numbers
Random numbers
Positive Hack Days
 
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
corehard_by
 
5 must-have patterns for your microservice - buildstuff
5 must-have patterns for your microservice - buildstuff5 must-have patterns for your microservice - buildstuff
5 must-have patterns for your microservice - buildstuff
Ali Kheyrollahi
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Voxxed Days Thesaloniki 2016 - 5 must have patterns for your web-scale micros...
Voxxed Days Thesaloniki 2016 - 5 must have patterns for your web-scale micros...Voxxed Days Thesaloniki 2016 - 5 must have patterns for your web-scale micros...
Voxxed Days Thesaloniki 2016 - 5 must have patterns for your web-scale micros...
Voxxed Days Thessaloniki
 
5 must have patterns for your microservice
5 must have patterns for your microservice5 must have patterns for your microservice
5 must have patterns for your microservice
Ali Kheyrollahi
 
Circuit Breakers with Swift
Circuit Breakers with SwiftCircuit Breakers with Swift
Circuit Breakers with Swift
Emanuel Guerrero
 
Actor Concurrency
Actor ConcurrencyActor Concurrency
Actor Concurrency
Alex Miller
 
Building communication platforms for the IoT
Building communication platforms for the IoTBuilding communication platforms for the IoT
Building communication platforms for the IoT
Troels Brødsgaard
 
Naked Performance With Clojure
Naked Performance With ClojureNaked Performance With Clojure
Naked Performance With Clojure
Metosin Oy
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
AOE
 
Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...
Odoo
 
GR8Conf 2011: GContracts
GR8Conf 2011: GContractsGR8Conf 2011: GContracts
GR8Conf 2011: GContracts
GR8Conf
 
5 must have patterns for your microservice - techorama
5 must have patterns for your microservice - techorama5 must have patterns for your microservice - techorama
5 must have patterns for your microservice - techorama
Ali Kheyrollahi
 

Similar to Cancel, Retry and Timeouts: Keep Your Sanity Thanks to Reactive Programming (20)

Building resilient applications
Building resilient applicationsBuilding resilient applications
Building resilient applications
 
Node.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitter
 
Advanced patterns in asynchronous programming
Advanced patterns in asynchronous programmingAdvanced patterns in asynchronous programming
Advanced patterns in asynchronous programming
 
What the CRaC - Superfast JVM startup
What the CRaC - Superfast JVM startupWhat the CRaC - Superfast JVM startup
What the CRaC - Superfast JVM startup
 
360|Flex Greenthreading In Flex
360|Flex Greenthreading In Flex360|Flex Greenthreading In Flex
360|Flex Greenthreading In Flex
 
Reutov, yunusov, nagibin random numbers take ii
Reutov, yunusov, nagibin   random numbers take iiReutov, yunusov, nagibin   random numbers take ii
Reutov, yunusov, nagibin random numbers take ii
 
Random numbers
Random numbersRandom numbers
Random numbers
 
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
 
5 must-have patterns for your microservice - buildstuff
5 must-have patterns for your microservice - buildstuff5 must-have patterns for your microservice - buildstuff
5 must-have patterns for your microservice - buildstuff
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Voxxed Days Thesaloniki 2016 - 5 must have patterns for your web-scale micros...
Voxxed Days Thesaloniki 2016 - 5 must have patterns for your web-scale micros...Voxxed Days Thesaloniki 2016 - 5 must have patterns for your web-scale micros...
Voxxed Days Thesaloniki 2016 - 5 must have patterns for your web-scale micros...
 
5 must have patterns for your microservice
5 must have patterns for your microservice5 must have patterns for your microservice
5 must have patterns for your microservice
 
Circuit Breakers with Swift
Circuit Breakers with SwiftCircuit Breakers with Swift
Circuit Breakers with Swift
 
Actor Concurrency
Actor ConcurrencyActor Concurrency
Actor Concurrency
 
Building communication platforms for the IoT
Building communication platforms for the IoTBuilding communication platforms for the IoT
Building communication platforms for the IoT
 
Naked Performance With Clojure
Naked Performance With ClojureNaked Performance With Clojure
Naked Performance With Clojure
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
 
Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...
 
GR8Conf 2011: GContracts
GR8Conf 2011: GContractsGR8Conf 2011: GContracts
GR8Conf 2011: GContracts
 
5 must have patterns for your microservice - techorama
5 must have patterns for your microservice - techorama5 must have patterns for your microservice - techorama
5 must have patterns for your microservice - techorama
 

More from VMware Tanzu

Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14
VMware Tanzu
 
What AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About ItWhat AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About It
VMware Tanzu
 
Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023
VMware Tanzu
 
Enhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at ScaleEnhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at Scale
VMware Tanzu
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023
VMware Tanzu
 
Platforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a ProductPlatforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a Product
VMware Tanzu
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready Apps
VMware Tanzu
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
VMware Tanzu
 
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdfSpring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
VMware Tanzu
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptx
VMware Tanzu
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - French
VMware Tanzu
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - English
VMware Tanzu
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - English
VMware Tanzu
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - French
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
VMware Tanzu
 
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring BootSpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
VMware Tanzu
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software Engineer
VMware Tanzu
 
SpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs PracticeSpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs Practice
VMware Tanzu
 

More from VMware Tanzu (20)

Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14
 
What AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About ItWhat AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About It
 
Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023
 
Enhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at ScaleEnhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at Scale
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023
 
Platforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a ProductPlatforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a Product
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready Apps
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
 
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdfSpring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
 
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
 
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptx
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - French
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - English
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - English
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - French
 
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
 
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring BootSpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software Engineer
 
SpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs PracticeSpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs Practice
 

Recently uploaded

Mobile app Development Services | Drona Infotech
Mobile app Development Services  | Drona InfotechMobile app Development Services  | Drona Infotech
Mobile app Development Services | Drona Infotech
Drona Infotech
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Julian Hyde
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
brainerhub1
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
dakas1
 
Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !
Marcin Chrost
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
Alberto Brandolini
 
How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?
ToXSL Technologies
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
VALiNTRY360
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
Green Software Development
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
SMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API ServiceSMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API Service
Yara Milbes
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
dakas1
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
TaghreedAltamimi
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 

Recently uploaded (20)

Mobile app Development Services | Drona Infotech
Mobile app Development Services  | Drona InfotechMobile app Development Services  | Drona Infotech
Mobile app Development Services | Drona Infotech
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
 
Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
 
How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
SMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API ServiceSMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API Service
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 

Cancel, Retry and Timeouts: Keep Your Sanity Thanks to Reactive Programming