Submit Search
Upload
Concurrency: The Good, The Bad and The Ugly
•
41 likes
•
39,278 views
L
legendofklang
Follow
Scala Days 2013, New York
Read less
Read more
Technology
Report
Share
Report
Share
1 of 203
Recommended
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
Kiwamu Okabe
Real World Akka Actor Recipes JavaOne 2013
Real World Akka Actor Recipes JavaOne 2013
Björn Antonsson
Concurrent Programming in Java
Concurrent Programming in Java
Ruben Inoto Soto
Relational Databases are Evolving To Support New Data Capabilities
Relational Databases are Evolving To Support New Data Capabilities
EDB
Scala Abide: A lint tool for Scala
Scala Abide: A lint tool for Scala
Iulian Dragos
Your Code is Wrong
Your Code is Wrong
nathanmarz
Puppet at Google
Puppet at Google
Puppet
поширеність та колообіг оксигену в природі
поширеність та колообіг оксигену в природі
Наталія Білоцерковець
Recommended
Ajhc Haskell Compiler with Reentrant GC
Ajhc Haskell Compiler with Reentrant GC
Kiwamu Okabe
Real World Akka Actor Recipes JavaOne 2013
Real World Akka Actor Recipes JavaOne 2013
Björn Antonsson
Concurrent Programming in Java
Concurrent Programming in Java
Ruben Inoto Soto
Relational Databases are Evolving To Support New Data Capabilities
Relational Databases are Evolving To Support New Data Capabilities
EDB
Scala Abide: A lint tool for Scala
Scala Abide: A lint tool for Scala
Iulian Dragos
Your Code is Wrong
Your Code is Wrong
nathanmarz
Puppet at Google
Puppet at Google
Puppet
поширеність та колообіг оксигену в природі
поширеність та колообіг оксигену в природі
Наталія Білоцерковець
Why Spark?
Why Spark?
Álvaro Agea Herradón
IMCSummit 2015 - Day 2 IT Business Track - 4 Myths about In-Memory Databases ...
IMCSummit 2015 - Day 2 IT Business Track - 4 Myths about In-Memory Databases ...
In-Memory Computing Summit
полтавщина – наш рідний край
полтавщина – наш рідний край
Наталія Білоцерковець
Java concurrency - Thread pools
Java concurrency - Thread pools
maksym220889
The Need for Async @ ScalaWorld
The Need for Async @ ScalaWorld
Konrad Malawski
Delivering Meaning In Near-Real Time At High Velocity In Massive Scale with A...
Delivering Meaning In Near-Real Time At High Velocity In Massive Scale with A...
Helena Edelson
Purely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
Vladimir Kostyukov
Monadic Java
Monadic Java
Mario Fusco
NewSQL overview, Feb 2015
NewSQL overview, Feb 2015
Ivan Glushkov
The Newest in Session Types
The Newest in Session Types
Roland Kuhn
Scala Days San Francisco
Scala Days San Francisco
Martin Odersky
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Amy W. Tang
Functional Programming Patterns (BuildStuff '14)
Functional Programming Patterns (BuildStuff '14)
Scott Wlaschin
Paper 9,modernist literature
Paper 9,modernist literature
Vibhuti Bhatt
Vishvas resume template-7
Vishvas resume template-7
vishvasyadav45
Aesthetics of Touch: Desform Conference
Aesthetics of Touch: Desform Conference
Vicky Teinaki
Comercial sap
Comercial sap
alavro005
2011 Meet the Parents Session - 3NT (Year End)
2011 Meet the Parents Session - 3NT (Year End)
damaisec
Robust and Scalable Concurrent Programming: Lesson from the Trenches
Robust and Scalable Concurrent Programming: Lesson from the Trenches
Sangjin Lee
Abusing the Cloud for Fun and Profit
Abusing the Cloud for Fun and Profit
Alan Pinstein
Stress Test & Chaos Engineering
Stress Test & Chaos Engineering
Diego Pacheco
testing for people who hate testing
testing for people who hate testing
Bram Vogelaar
More Related Content
Viewers also liked
Why Spark?
Why Spark?
Álvaro Agea Herradón
IMCSummit 2015 - Day 2 IT Business Track - 4 Myths about In-Memory Databases ...
IMCSummit 2015 - Day 2 IT Business Track - 4 Myths about In-Memory Databases ...
In-Memory Computing Summit
полтавщина – наш рідний край
полтавщина – наш рідний край
Наталія Білоцерковець
Java concurrency - Thread pools
Java concurrency - Thread pools
maksym220889
The Need for Async @ ScalaWorld
The Need for Async @ ScalaWorld
Konrad Malawski
Delivering Meaning In Near-Real Time At High Velocity In Massive Scale with A...
Delivering Meaning In Near-Real Time At High Velocity In Massive Scale with A...
Helena Edelson
Purely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
Vladimir Kostyukov
Monadic Java
Monadic Java
Mario Fusco
NewSQL overview, Feb 2015
NewSQL overview, Feb 2015
Ivan Glushkov
The Newest in Session Types
The Newest in Session Types
Roland Kuhn
Scala Days San Francisco
Scala Days San Francisco
Martin Odersky
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Amy W. Tang
Functional Programming Patterns (BuildStuff '14)
Functional Programming Patterns (BuildStuff '14)
Scott Wlaschin
Paper 9,modernist literature
Paper 9,modernist literature
Vibhuti Bhatt
Vishvas resume template-7
Vishvas resume template-7
vishvasyadav45
Aesthetics of Touch: Desform Conference
Aesthetics of Touch: Desform Conference
Vicky Teinaki
Comercial sap
Comercial sap
alavro005
2011 Meet the Parents Session - 3NT (Year End)
2011 Meet the Parents Session - 3NT (Year End)
damaisec
Viewers also liked
(18)
Why Spark?
Why Spark?
IMCSummit 2015 - Day 2 IT Business Track - 4 Myths about In-Memory Databases ...
IMCSummit 2015 - Day 2 IT Business Track - 4 Myths about In-Memory Databases ...
полтавщина – наш рідний край
полтавщина – наш рідний край
Java concurrency - Thread pools
Java concurrency - Thread pools
The Need for Async @ ScalaWorld
The Need for Async @ ScalaWorld
Delivering Meaning In Near-Real Time At High Velocity In Massive Scale with A...
Delivering Meaning In Near-Real Time At High Velocity In Massive Scale with A...
Purely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
Monadic Java
Monadic Java
NewSQL overview, Feb 2015
NewSQL overview, Feb 2015
The Newest in Session Types
The Newest in Session Types
Scala Days San Francisco
Scala Days San Francisco
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Functional Programming Patterns (BuildStuff '14)
Functional Programming Patterns (BuildStuff '14)
Paper 9,modernist literature
Paper 9,modernist literature
Vishvas resume template-7
Vishvas resume template-7
Aesthetics of Touch: Desform Conference
Aesthetics of Touch: Desform Conference
Comercial sap
Comercial sap
2011 Meet the Parents Session - 3NT (Year End)
2011 Meet the Parents Session - 3NT (Year End)
Similar to Concurrency: The Good, The Bad and The Ugly
Robust and Scalable Concurrent Programming: Lesson from the Trenches
Robust and Scalable Concurrent Programming: Lesson from the Trenches
Sangjin Lee
Abusing the Cloud for Fun and Profit
Abusing the Cloud for Fun and Profit
Alan Pinstein
Stress Test & Chaos Engineering
Stress Test & Chaos Engineering
Diego Pacheco
testing for people who hate testing
testing for people who hate testing
Bram Vogelaar
Getting Started In Qa
Getting Started In Qa
ctalbert
Pipeline conference 2017 - Breaking down your build: architectural patterns f...
Pipeline conference 2017 - Breaking down your build: architectural patterns f...
Abraham Marin-Perez
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
jjhuff
Cloud automation strategies
Cloud automation strategies
Puppet Labs
Cloud automation strategies
Cloud automation strategies
Puppet Labs
Dear compiler please don't be my nanny v2
Dear compiler please don't be my nanny v2
Dino Dini
A Game-play Architecture for Performance
A Game-play Architecture for Performance
tektor
flowr streamlining computing workflows
flowr streamlining computing workflows
sahil seth
Metasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCU
Kiwamu Okabe
High-Octane Dev Teams: Three Things You Can Do To Improve Code Quality
High-Octane Dev Teams: Three Things You Can Do To Improve Code Quality
Atlassian
Unit testing traning
Unit testing traning
Diego Pacheco
Clearly, I Have Made Some Bad Decisions
Clearly, I Have Made Some Bad Decisions
Jonathan Hitchcock
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
Hakka Labs
Scalability without going nuts
Scalability without going nuts
James Cox
NoVa Jug Sept. 08 Terracotta Clustered Architecture Patterns
NoVa Jug Sept. 08 Terracotta Clustered Architecture Patterns
oletizi
Story Driven Development
Story Driven Development
brynary
Similar to Concurrency: The Good, The Bad and The Ugly
(20)
Robust and Scalable Concurrent Programming: Lesson from the Trenches
Robust and Scalable Concurrent Programming: Lesson from the Trenches
Abusing the Cloud for Fun and Profit
Abusing the Cloud for Fun and Profit
Stress Test & Chaos Engineering
Stress Test & Chaos Engineering
testing for people who hate testing
testing for people who hate testing
Getting Started In Qa
Getting Started In Qa
Pipeline conference 2017 - Breaking down your build: architectural patterns f...
Pipeline conference 2017 - Breaking down your build: architectural patterns f...
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Cloud automation strategies
Cloud automation strategies
Cloud automation strategies
Cloud automation strategies
Dear compiler please don't be my nanny v2
Dear compiler please don't be my nanny v2
A Game-play Architecture for Performance
A Game-play Architecture for Performance
flowr streamlining computing workflows
flowr streamlining computing workflows
Metasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCU
High-Octane Dev Teams: Three Things You Can Do To Improve Code Quality
High-Octane Dev Teams: Three Things You Can Do To Improve Code Quality
Unit testing traning
Unit testing traning
Clearly, I Have Made Some Bad Decisions
Clearly, I Have Made Some Bad Decisions
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
Scalability without going nuts
Scalability without going nuts
NoVa Jug Sept. 08 Terracotta Clustered Architecture Patterns
NoVa Jug Sept. 08 Terracotta Clustered Architecture Patterns
Story Driven Development
Story Driven Development
Recently uploaded
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
Nanddeep Nachan
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Juan lago vázquez
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
UiPathCommunity
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
danishmna97
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
ThousandEyes
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Martijn de Jong
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Edi Saputra
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
Khushali Kathiriya
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Orbitshub
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
Product Anonymous
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
rafiqahmad00786416
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
Rustici Software
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
apidays
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
MIND CTI
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
Remote DBA Services
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
The Digital Insurer
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
apidays
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Orbitshub
Recently uploaded
(20)
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Concurrency: The Good, The Bad and The Ugly
1.
Concurrency the Good, the
Bad and the Ugly Dr. Roland Kuhn Akka Tech Lead Lgd. Viktor Klang Director of Engineering
2.
Concurrency wat?
3.
Characteristics
4.
Compartmentalization Characteristics
5.
Compartmentalization Coordination Characteristics
6.
Compartmentalization Coordination Execution Characteristics
7.
Compartmentalization ExecutionCoordination Characteristics
8.
Characteristics
9.
Characteristics Good UglyBad
10.
Characteristics Good UglyBad ☓
11.
Threads … and locks
12.
The Good
13.
The Good ✓Can be
mapped onto CPUs
14.
The Good ✓Can be
mapped onto CPUs ✓"To the metal" — no overhead
15.
The Good ✓Can be
mapped onto CPUs ✓"To the metal" — no overhead ✓High degree of control
16.
The Good ✓Can be
mapped onto CPUs ✓"To the metal" — no overhead ✓High degree of control ✓Debugging
17.
The Bad
18.
The Bad ☣Heavyweight
19.
The Bad ☣Heavyweight ☣Scarce
20.
The Bad ☣Heavyweight ☣Scarce ☣Diminishing returns
21.
The Bad ☣Heavyweight ☣Scarce ☣Diminishing returns ☣High
wake-up latency
22.
The Bad ☣Heavyweight ☣Scarce ☣Diminishing returns ☣High
wake-up latency ☣Barebones / low-level
23.
The Bad ☣Heavyweight ☣Scarce ☣Diminishing returns ☣High
wake-up latency ☣Barebones / low-level ☣No means of recovery
24.
The Ugly
25.
The Ugly Is it
threadsafe?
26.
The Ugly Is it
threadsafe? — Too coarse locks?
27.
The Ugly Is it
threadsafe? — Too coarse locks? — The right locks?
28.
The Ugly Is it
threadsafe? — Too coarse locks? — The right locks? — The right locking order?
29.
The Ugly Is it
threadsafe? — Too coarse locks? — The right locks? — The right locking order? Defensive error handling
30.
The Ugly Is it
threadsafe? — Too coarse locks? — The right locks? — The right locking order? Defensive error handling Do you understand JSR133?
31.
Compartmentalization ExecutionCoordination Conclusion
32.
Compartmentalization ExecutionCoordination Conclusion Thread + Locks
33.
EventLoop … or Executor
34.
The Good
35.
The Good ✓Configurable execution
36.
The Good ✓Configurable execution ✓M:N
task to thread ratio
37.
The Good ✓Configurable execution ✓M:N
task to thread ratio ✓Less JMM headache
38.
The Bad
39.
The Bad ☣How to
handle errors?
40.
The Bad ☣How to
handle errors? ☣Dealing with blocking code
41.
The Bad ☣How to
handle errors? ☣Dealing with blocking code ☣Closing over mutable state
42.
The Ugly
43.
The Ugly Callback Hell
44.
The Ugly Callback Hell Composing
results
45.
The Ugly Callback Hell Composing
results Low reusability
46.
The Ugly Callback Hell Composing
results Low reusability Is it sync or async?
47.
The Ugly Callback Hell Composing
results Low reusability Is it sync or async? Debugging
48.
Compartmentalization ExecutionCoordination Conclusion
49.
Compartmentalization ExecutionCoordination Conclusion Executor
50.
STM Software Transactional Memory
51.
The Good
52.
The Good ✓Typesafe &
non-blocking
53.
The Good ✓Typesafe &
non-blocking ✓Transactional
54.
The Good ✓Typesafe &
non-blocking ✓Transactional ✓Composable
55.
The Bad
56.
The Bad ☣Size to
failure ratio
57.
The Bad ☣Size to
failure ratio ☣Retries are costly
58.
The Ugly
59.
The Ugly Dealing with
side-effects
60.
The Ugly Dealing with
side-effects Dealing with failure
61.
The Ugly Dealing with
side-effects Dealing with failure Unpredictable performance
62.
The Ugly Dealing with
side-effects Dealing with failure Unpredictable performance Debugging
63.
Compartmentalization ExecutionCoordination Conclusion
64.
Compartmentalization ExecutionCoordination STM Conclusion
65.
Java Future … and
ExecutorService
66.
The Good
67.
The Good ✓Configurable execution
68.
The Good ✓Configurable execution ✓Typesafe
69.
The Bad
70.
The Bad ☣Blocking composition
71.
The Bad ☣Blocking composition ☣Guesstimation
of deadlock
72.
The Bad ☣Blocking composition ☣Guesstimation
of deadlock ☣Futures are one-off
73.
The Ugly
74.
The Ugly Cancel other's
Futures?
75.
The Ugly Cancel other's
Futures? Non-blocking requires polling
76.
The Ugly Cancel other's
Futures? Non-blocking requires polling Dealing with failure
77.
Compartmentalization ExecutionCoordination Conclusion
78.
Compartmentalization ExecutionCoordination Java Future Conclusion
79.
Scala Future … with
ExecutionContext
80.
The Good
81.
The Good ✓Typesafe
82.
The Good ✓Typesafe ✓Non-blocking composition
83.
The Good ✓Typesafe ✓Non-blocking composition ✓Monadic
84.
The Good ✓Typesafe ✓Non-blocking composition ✓Monadic ✓Freely
sharable
85.
The Good ✓Typesafe ✓Non-blocking composition ✓Monadic ✓Freely
sharable ✓Can recover from failure
86.
The Bad
87.
The Bad ☣Defers failures
to downstream
88.
The Bad ☣Defers failures
to downstream ☣Closing over mutable state
89.
The Bad ☣Defers failures
to downstream ☣Closing over mutable state ☣No ordering of callbacks
90.
The Bad ☣Defers failures
to downstream ☣Closing over mutable state ☣No ordering of callbacks ☣Futures are one-off
91.
The Ugly
92.
The Ugly Callback Hell
(use for instead)
93.
The Ugly Callback Hell
(use for instead) Debugging
94.
Compartmentalization ExecutionCoordination Conclusion
95.
Compartmentalization ExecutionCoordination Conclusion Scala Future
96.
Akka Dataflow
97.
The Good
98.
The Good ✓Typesafe
99.
The Good ✓Typesafe ✓Non-blocking composition
100.
The Good ✓Typesafe ✓Non-blocking composition ✓Declarative
using direct style
101.
The Good ✓Typesafe ✓Non-blocking composition ✓Declarative
using direct style ✓Deterministic
102.
The Good ✓Typesafe ✓Non-blocking composition ✓Declarative
using direct style ✓Deterministic ✓Non-local composition
103.
The Bad
104.
The Bad ☣CPS plugin
error messages
105.
The Bad ☣CPS plugin
error messages ☣Limited applicability
106.
The Bad ☣CPS plugin
error messages ☣Limited applicability — Error handling
107.
The Bad ☣CPS plugin
error messages ☣Limited applicability — Error handling ☣Debugging
108.
The Bad ☣CPS plugin
error messages ☣Limited applicability — Error handling ☣Debugging ☣Futures are one-off
109.
The Ugly
110.
The Ugly CPS plugin
error messages!!
111.
Compartmentalization ExecutionCoordination Conclusion
112.
Compartmentalization ExecutionCoordination Conclusion Dataflow
113.
Scala Async
114.
The Good
115.
The Good ✓Typesafe
116.
The Good ✓Typesafe ✓Non-blocking composition
117.
The Good ✓Typesafe ✓Non-blocking composition ✓Declarative
using direct style
118.
The Bad
119.
The Bad ☣Limited applicability
120.
The Bad ☣Limited applicability ☣Debugging
121.
The Bad ☣Limited applicability ☣Debugging ☣Futures
are one-off
122.
The Ugly
123.
The Ugly Error handling
124.
Compartmentalization ExecutionCoordination Conclusion
125.
Compartmentalization ExecutionCoordination Conclusion Async
126.
Threads … and Queues
127.
The Good
128.
The Good ✓Typesafe
129.
The Good ✓Typesafe ✓Blocking or
Non-blocking
130.
The Good ✓Typesafe ✓Blocking or
Non-blocking ✓Back pressure possible
131.
The Bad
132.
The Bad ☣Heavyweight
133.
The Bad ☣Heavyweight ☣Scarce
134.
The Bad ☣Heavyweight ☣Scarce ☣Diminishing returns
135.
The Bad ☣Heavyweight ☣Scarce ☣Diminishing returns ☣High
wake-up latency
136.
The Bad ☣Heavyweight ☣Scarce ☣Diminishing returns ☣High
wake-up latency ☣Not really high-level
137.
The Bad ☣Heavyweight ☣Scarce ☣Diminishing returns ☣High
wake-up latency ☣Not really high-level ☣No means of recovery
138.
The Ugly
139.
The Ugly Propagating failure
140.
The Ugly Propagating failure Unidirectional
141.
Compartmentalization ExecutionCoordination Conclusion
142.
Compartmentalization ExecutionCoordination Conclusion Thread + Queue
143.
Actors
144.
The Good
145.
The Good ✓Encapsulation
146.
The Good ✓Encapsulation ✓Supervision
147.
The Good ✓Encapsulation ✓Supervision ✓Configurable execution
148.
The Good ✓Encapsulation ✓Supervision ✓Configurable execution ✓Location
transparency
149.
The Good ✓Encapsulation ✓Supervision ✓Configurable execution ✓Location
transparency ✓Models real-world
150.
The Good ✓Encapsulation ✓Supervision ✓Configurable execution ✓Location
transparency ✓Models real-world ✓Require less guarantees
151.
The Bad
152.
The Bad ☣Untyped
153.
The Bad ☣Untyped ☣Explicit lifecycle
management
154.
The Bad ☣Untyped ☣Explicit lifecycle
management ☣Debugging
155.
The Ugly
156.
The Ugly Easy encapsulation
violation
157.
The Ugly Easy encapsulation
violation Composition can be awkward
158.
Compartmentalization ExecutionCoordination Conclusion
159.
Compartmentalization ExecutionCoordination Conclusion Actors
160.
Rx & friends
161.
The Good
162.
The Good ✓Typesafe
163.
The Good ✓Typesafe ✓Non-blocking composition
164.
The Good ✓Typesafe ✓Non-blocking composition ✓Reusable
components
165.
The Good ✓Typesafe ✓Non-blocking composition ✓Reusable
components ✓Stream centric
166.
The Bad
167.
The Bad ☣Defers failures
to downstream
168.
The Bad ☣Defers failures
to downstream ☣Explicit lifecycle management
169.
The Bad ☣Defers failures
to downstream ☣Explicit lifecycle management ☣"Glitches"
170.
The Bad ☣Defers failures
to downstream ☣Explicit lifecycle management ☣"Glitches" ☣Debugging
171.
The Ugly
172.
The Ugly Callback Limbo
173.
The Ugly Callback Limbo Inverted
control flow
174.
Compartmentalization ExecutionCoordination Conclusion
175.
Compartmentalization ExecutionCoordination Conclusion Rx
176.
Functional Reactive Programming
177.
The Good
178.
The Good ✓Typesafe
179.
The Good ✓Typesafe ✓Declarative value
composition
180.
The Good ✓Typesafe ✓Declarative value
composition ✓Direct style
181.
The Good ✓Typesafe ✓Declarative value
composition ✓Direct style ✓Deterministic
182.
The Bad
183.
The Bad ☣Single-threaded
184.
The Ugly
185.
The Ugly Side-effecting can
introduce glitches
186.
Compartmentalization ExecutionCoordination Conclusion
187.
Compartmentalization ExecutionCoordination Conclusion FRP
188.
Summary 60
189.
Compartmentalization ExecutionCoordination Conclusion
190.
Compartmentalization ExecutionCoordination STM Conclusion
191.
Compartmentalization ExecutionCoordination STM Conclusion Scala Future
192.
Compartmentalization ExecutionCoordination STM Conclusion Scala Future FRP
193.
Compartmentalization ExecutionCoordination STM Java Future Conclusion Scala Future FRP
194.
Compartmentalization ExecutionCoordination STM Java Future Conclusion Scala Future FRP Actors
195.
Compartmentalization ExecutionCoordination STM Java Future Conclusion Scala Future FRP Actors Dataflow
& Async & Rx
196.
Compartmentalization ExecutionCoordination STM Java Future Conclusion Scala Future FRP Actors Dataflow
& Async & Rx Thread + Queue
197.
Compartmentalization ExecutionCoordination STM Java Future Conclusion Scala Future FRP Actors Dataflow
& Async & Rx Thread + Queue Executor
198.
Compartmentalization ExecutionCoordination STM Java Future Conclusion Scala Future FRP Actors Dataflow
& Async & Rx Thread + Queue Executor Thread + Locks
199.
Conclusion
200.
Conclusion Pick
201.
Conclusion Pick your
202.
Conclusion Pick your ☠
203.
E0F