SlideShare a Scribd company logo
1 of 203
Concurrency
the Good, the Bad and the Ugly
Dr. Roland Kuhn
Akka Tech Lead
Lgd. Viktor Klang
Director of Engineering
Concurrency
wat?
Characteristics
Compartmentalization
Characteristics
Compartmentalization
Coordination
Characteristics
Compartmentalization
Coordination
Execution
Characteristics
Compartmentalization
ExecutionCoordination
Characteristics
Characteristics
Characteristics
Good
UglyBad
Characteristics
Good
UglyBad ☓
Threads
… and locks
The Good
The Good
✓Can be mapped onto CPUs
The Good
✓Can be mapped onto CPUs
✓"To the metal" — no overhead
The Good
✓Can be mapped onto CPUs
✓"To the metal" — no overhead
✓High degree of control
The Good
✓Can be mapped onto CPUs
✓"To the metal" — no overhead
✓High degree of control
✓Debugging
The Bad
The Bad
☣Heavyweight
The Bad
☣Heavyweight
☣Scarce
The Bad
☣Heavyweight
☣Scarce
☣Diminishing returns
The Bad
☣Heavyweight
☣Scarce
☣Diminishing returns
☣High wake-up latency
The Bad
☣Heavyweight
☣Scarce
☣Diminishing returns
☣High wake-up latency
☣Barebones / low-level
The Bad
☣Heavyweight
☣Scarce
☣Diminishing returns
☣High wake-up latency
☣Barebones / low-level
☣No means of recovery
The Ugly
The Ugly
Is it threadsafe?
The Ugly
Is it threadsafe?
— Too coarse locks?
The Ugly
Is it threadsafe?
— Too coarse locks?
— The right locks?
The Ugly
Is it threadsafe?
— Too coarse locks?
— The right locks?
— The right locking order?
The Ugly
Is it threadsafe?
— Too coarse locks?
— The right locks?
— The right locking order?
Defensive error handling
The Ugly
Is it threadsafe?
— Too coarse locks?
— The right locks?
— The right locking order?
Defensive error handling
Do you understand JSR133?
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
Conclusion
Thread + Locks
EventLoop
… or Executor
The Good
The Good
✓Configurable execution
The Good
✓Configurable execution
✓M:N task to thread ratio
The Good
✓Configurable execution
✓M:N task to thread ratio
✓Less JMM headache
The Bad
The Bad
☣How to handle errors?
The Bad
☣How to handle errors?
☣Dealing with blocking code
The Bad
☣How to handle errors?
☣Dealing with blocking code
☣Closing over mutable state
The Ugly
The Ugly
Callback Hell
The Ugly
Callback Hell
Composing results
The Ugly
Callback Hell
Composing results
Low reusability
The Ugly
Callback Hell
Composing results
Low reusability
Is it sync or async?
The Ugly
Callback Hell
Composing results
Low reusability
Is it sync or async?
Debugging
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
Conclusion
Executor
STM
Software Transactional Memory
The Good
The Good
✓Typesafe & non-blocking
The Good
✓Typesafe & non-blocking
✓Transactional
The Good
✓Typesafe & non-blocking
✓Transactional
✓Composable
The Bad
The Bad
☣Size to failure ratio
The Bad
☣Size to failure ratio
☣Retries are costly
The Ugly
The Ugly
Dealing with side-effects
The Ugly
Dealing with side-effects
Dealing with failure
The Ugly
Dealing with side-effects
Dealing with failure
Unpredictable performance
The Ugly
Dealing with side-effects
Dealing with failure
Unpredictable performance
Debugging
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
STM
Conclusion
Java Future
… and ExecutorService
The Good
The Good
✓Configurable execution
The Good
✓Configurable execution
✓Typesafe
The Bad
The Bad
☣Blocking composition
The Bad
☣Blocking composition
☣Guesstimation of deadlock
The Bad
☣Blocking composition
☣Guesstimation of deadlock
☣Futures are one-off
The Ugly
The Ugly
Cancel other's Futures?
The Ugly
Cancel other's Futures?
Non-blocking requires polling
The Ugly
Cancel other's Futures?
Non-blocking requires polling
Dealing with failure
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
Java Future
Conclusion
Scala Future
… with ExecutionContext
The Good
The Good
✓Typesafe
The Good
✓Typesafe
✓Non-blocking composition
The Good
✓Typesafe
✓Non-blocking composition
✓Monadic
The Good
✓Typesafe
✓Non-blocking composition
✓Monadic
✓Freely sharable
The Good
✓Typesafe
✓Non-blocking composition
✓Monadic
✓Freely sharable
✓Can recover from failure
The Bad
The Bad
☣Defers failures to downstream
The Bad
☣Defers failures to downstream
☣Closing over mutable state
The Bad
☣Defers failures to downstream
☣Closing over mutable state
☣No ordering of callbacks
The Bad
☣Defers failures to downstream
☣Closing over mutable state
☣No ordering of callbacks
☣Futures are one-off
The Ugly
The Ugly
Callback Hell (use for instead)
The Ugly
Callback Hell (use for instead)
Debugging
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
Conclusion
Scala Future
Akka Dataflow
The Good
The Good
✓Typesafe
The Good
✓Typesafe
✓Non-blocking composition
The Good
✓Typesafe
✓Non-blocking composition
✓Declarative using direct style
The Good
✓Typesafe
✓Non-blocking composition
✓Declarative using direct style
✓Deterministic
The Good
✓Typesafe
✓Non-blocking composition
✓Declarative using direct style
✓Deterministic
✓Non-local composition
The Bad
The Bad
☣CPS plugin error messages
The Bad
☣CPS plugin error messages
☣Limited applicability
The Bad
☣CPS plugin error messages
☣Limited applicability
— Error handling
The Bad
☣CPS plugin error messages
☣Limited applicability
— Error handling
☣Debugging
The Bad
☣CPS plugin error messages
☣Limited applicability
— Error handling
☣Debugging
☣Futures are one-off
The Ugly
The Ugly
CPS plugin error messages!!
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
Conclusion
Dataflow
Scala Async
The Good
The Good
✓Typesafe
The Good
✓Typesafe
✓Non-blocking composition
The Good
✓Typesafe
✓Non-blocking composition
✓Declarative using direct style
The Bad
The Bad
☣Limited applicability
The Bad
☣Limited applicability
☣Debugging
The Bad
☣Limited applicability
☣Debugging
☣Futures are one-off
The Ugly
The Ugly
Error handling
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
Conclusion
Async
Threads
… and Queues
The Good
The Good
✓Typesafe
The Good
✓Typesafe
✓Blocking or Non-blocking
The Good
✓Typesafe
✓Blocking or Non-blocking
✓Back pressure possible
The Bad
The Bad
☣Heavyweight
The Bad
☣Heavyweight
☣Scarce
The Bad
☣Heavyweight
☣Scarce
☣Diminishing returns
The Bad
☣Heavyweight
☣Scarce
☣Diminishing returns
☣High wake-up latency
The Bad
☣Heavyweight
☣Scarce
☣Diminishing returns
☣High wake-up latency
☣Not really high-level
The Bad
☣Heavyweight
☣Scarce
☣Diminishing returns
☣High wake-up latency
☣Not really high-level
☣No means of recovery
The Ugly
The Ugly
Propagating failure
The Ugly
Propagating failure
Unidirectional
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
Conclusion
Thread + Queue
Actors
The Good
The Good
✓Encapsulation
The Good
✓Encapsulation
✓Supervision
The Good
✓Encapsulation
✓Supervision
✓Configurable execution
The Good
✓Encapsulation
✓Supervision
✓Configurable execution
✓Location transparency
The Good
✓Encapsulation
✓Supervision
✓Configurable execution
✓Location transparency
✓Models real-world
The Good
✓Encapsulation
✓Supervision
✓Configurable execution
✓Location transparency
✓Models real-world
✓Require less guarantees
The Bad
The Bad
☣Untyped
The Bad
☣Untyped
☣Explicit lifecycle management
The Bad
☣Untyped
☣Explicit lifecycle management
☣Debugging
The Ugly
The Ugly
Easy encapsulation violation
The Ugly
Easy encapsulation violation
Composition can be awkward
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
Conclusion
Actors
Rx & friends
The Good
The Good
✓Typesafe
The Good
✓Typesafe
✓Non-blocking composition
The Good
✓Typesafe
✓Non-blocking composition
✓Reusable components
The Good
✓Typesafe
✓Non-blocking composition
✓Reusable components
✓Stream centric
The Bad
The Bad
☣Defers failures to downstream
The Bad
☣Defers failures to downstream
☣Explicit lifecycle management
The Bad
☣Defers failures to downstream
☣Explicit lifecycle management
☣"Glitches"
The Bad
☣Defers failures to downstream
☣Explicit lifecycle management
☣"Glitches"
☣Debugging
The Ugly
The Ugly
Callback Limbo
The Ugly
Callback Limbo
Inverted control flow
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
Conclusion
Rx
Functional Reactive
Programming
The Good
The Good
✓Typesafe
The Good
✓Typesafe
✓Declarative value composition
The Good
✓Typesafe
✓Declarative value composition
✓Direct style
The Good
✓Typesafe
✓Declarative value composition
✓Direct style
✓Deterministic
The Bad
The Bad
☣Single-threaded
The Ugly
The Ugly
Side-effecting can introduce
glitches
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
Conclusion
FRP
Summary
60
Compartmentalization
ExecutionCoordination
Conclusion
Compartmentalization
ExecutionCoordination
STM
Conclusion
Compartmentalization
ExecutionCoordination
STM
Conclusion
Scala Future
Compartmentalization
ExecutionCoordination
STM
Conclusion
Scala Future
FRP
Compartmentalization
ExecutionCoordination
STM
Java Future
Conclusion
Scala Future
FRP
Compartmentalization
ExecutionCoordination
STM
Java Future
Conclusion
Scala Future
FRP
Actors
Compartmentalization
ExecutionCoordination
STM
Java Future
Conclusion
Scala Future
FRP
Actors
Dataflow & Async & Rx
Compartmentalization
ExecutionCoordination
STM
Java Future
Conclusion
Scala Future
FRP
Actors
Dataflow & Async & Rx
Thread + Queue
Compartmentalization
ExecutionCoordination
STM
Java Future
Conclusion
Scala Future
FRP
Actors
Dataflow & Async & Rx
Thread + Queue
Executor
Compartmentalization
ExecutionCoordination
STM
Java Future
Conclusion
Scala Future
FRP
Actors
Dataflow & Async & Rx
Thread + Queue
Executor
Thread + Locks
Conclusion
Conclusion
Pick
Conclusion
Pick
your
Conclusion
Pick
your
☠
E0F

More Related Content

Viewers also liked

Paper 9,modernist literature
Paper 9,modernist literaturePaper 9,modernist literature
Paper 9,modernist literature
Vibhuti Bhatt
 
Vishvas resume template-7
Vishvas resume template-7Vishvas resume template-7
Vishvas resume template-7
vishvasyadav45
 

Viewers also liked (18)

Why Spark?
Why Spark?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 ...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 poolsJava concurrency - Thread pools
Java concurrency - Thread pools
 
The Need for Async @ ScalaWorld
The Need for Async @ ScalaWorldThe 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...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 ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
 
Monadic Java
Monadic JavaMonadic Java
Monadic Java
 
NewSQL overview, Feb 2015
NewSQL overview, Feb 2015NewSQL overview, Feb 2015
NewSQL overview, Feb 2015
 
The Newest in Session Types
The Newest in Session TypesThe Newest in Session Types
The Newest in Session Types
 
Scala Days San Francisco
Scala Days San FranciscoScala Days San Francisco
Scala Days San Francisco
 
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)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)Functional Programming Patterns (BuildStuff '14)
Functional Programming Patterns (BuildStuff '14)
 
Paper 9,modernist literature
Paper 9,modernist literaturePaper 9,modernist literature
Paper 9,modernist literature
 
Vishvas resume template-7
Vishvas resume template-7Vishvas resume template-7
Vishvas resume template-7
 
Aesthetics of Touch: Desform Conference
Aesthetics of Touch: Desform ConferenceAesthetics of Touch: Desform Conference
Aesthetics of Touch: Desform Conference
 
Comercial sap
Comercial sapComercial sap
Comercial sap
 
2011 Meet the Parents Session - 3NT (Year End)
2011 Meet the Parents Session - 3NT (Year End)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 TrenchesRobust and Scalable Concurrent Programming: Lesson from the Trenches
Robust and Scalable Concurrent Programming: Lesson from the Trenches
Sangjin Lee
 
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)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 strategiesCloud automation strategies
Cloud automation strategies
Puppet Labs
 
Cloud automation strategies
Cloud automation strategiesCloud automation strategies
Cloud automation strategies
Puppet Labs
 
Scalability without going nuts
Scalability without going nutsScalability without going nuts
Scalability without going nuts
James Cox
 

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 TrenchesRobust 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 ProfitAbusing the Cloud for Fun and Profit
Abusing the Cloud for Fun and Profit
 
Stress Test & Chaos Engineering
Stress Test & Chaos EngineeringStress Test & Chaos Engineering
Stress Test & Chaos Engineering
 
testing for people who hate testing
testing for people who hate testingtesting for people who hate testing
testing for people who hate testing
 
Getting Started In Qa
Getting Started In QaGetting 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...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)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 strategiesCloud automation strategies
Cloud automation strategies
 
Cloud automation strategies
Cloud automation strategiesCloud automation strategies
Cloud automation strategies
 
Dear compiler please don't be my nanny v2
Dear compiler  please don't be my nanny v2Dear 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 PerformanceA Game-play Architecture for Performance
A Game-play Architecture for Performance
 
flowr streamlining computing workflows
flowr streamlining computing workflowsflowr streamlining computing workflows
flowr streamlining computing workflows
 
Metasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCUMetasepi 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 QualityHigh-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 traningUnit testing traning
Unit testing traning
 
Clearly, I Have Made Some Bad Decisions
Clearly, I Have Made Some Bad DecisionsClearly, 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-SubramanyaErlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
 
Scalability without going nuts
Scalability without going nutsScalability without going nuts
Scalability without going nuts
 
NoVa Jug Sept. 08 Terracotta Clustered Architecture Patterns
NoVa Jug Sept. 08 Terracotta Clustered Architecture PatternsNoVa Jug Sept. 08 Terracotta Clustered Architecture Patterns
NoVa Jug Sept. 08 Terracotta Clustered Architecture Patterns
 
Story Driven Development
Story Driven DevelopmentStory Driven Development
Story Driven Development
 

Recently uploaded

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

Concurrency: The Good, The Bad and The Ugly