SlideShare a Scribd company logo
Why Is Concurrent Programming Hard?
And What Can We Do about It?
Stefan Marr
Zurich, September 10, 2015
70 Years of Parallel Execution
2[U.S. Army Photo]
Perhaps >3,500 Books and
>100,000 Papers?
3
…
The Problem
No Silver Bullet!
Actors
Transactional Memory
Fork/Join
Locks, Monitors, …
4
Data Flow
Actors
5
Actor A Actor B
Data: No Shared Memory
Parallelism: Structural, Between Actors
Actor Use Cases
Hewitt/Agha Actors Communicating Event Loops
6
Finer Grained
Parallel Entities
Coarser Grained
Subsystems
User Interface Data Backend
But you got to do
parallel updates on graphs?
Transactional Memory
7
Thread A
Thread B
Isolated
Area of A
Isolated
Area of B
Transactional Memory
8
Too much overhead?
well structured data?Thread A
Thread B
Isolated
Area of A
Isolated
Area of B
Fork/Join
9
Structured Data but
not divide and conquer?
Pick Something Else!
10
And All Languages Got Everything
• Actors, Akktors, Actorz, …
• Threads, Locks
• Fork/Join
• Parallel Collections
• Futures, Promises
• Java’s util.concurrent
• Channels
• STM, Data Flow, …
Ruby
• Actors, Agents
• Looks, Semaphores, Barriers
• Atoms
• Futures, Promises
• Channels
• Thread Pools
• Thread-safe Array, Hash, …
• STM, Data Flow, …
11
But, Not designed for Interaction!
Clojure
“designed to be a [.] language
[.] with an efficient and robust
infrastructure for
multithreaded programming.”
(dosync
(future
fun-with-sideeffect)
"...")
Haskell
“an advanced [.] language [.] of
cutting-edge research [.] with [.]
built-in concurrency and
parallelism”
Control.Concurrent
– MVar
– Chan
Control.Concurrent.STM
– TMVar
– TChan
12
Is it Just an Academic Issue?
• Uses Locks and Atomic*
• Multiple async.
future/task abstractions
• Multiple ‘transaction’
systems
> 4500 “deadlock” bugs
> 530 “race condition” bugs
13
Is it Just an Academic Issue?
14
Jaroslav Tulach 2007-03-21 08:41:46 UTC
issue 75858 - e.g. calling 3rd party code from inside of
runAtomicAction method
issue 85858 when the 3rd party code called other code while
holding internal locks.
issue 95675 that broke web team & co. and
five people were hunting for it for a week
From: https://netbeans.org/bugzilla/show_bug.cgi?id=97278
WHAT CAN WE DO ABOUT IT?
Concurrency without accidental complexity
Harmonize Concurrency Abstractions
Desirable Properties
– Free of low-level data races
– Deadlock free
– …
Design Dimensions
– Activity granularity
• Lightweight vs. heavyweight
– Blocking vs. non-blocking
– Isolation
• Granularity
• Permanent vs. temporary
• Optimistic vs. pessimistic
– Deterministic vs. non-deterministic
– …
Actors STM
many degrees of
design freedom
16
Fundamental Elements as Building Blocks
• Identify and formalize
• Building blocks for
languages and
frameworks
• Compose harmonious
elements to guarantee
– Deadlock freedom
– Race freedom
– …
blocking
non-blocking
lightweight
heavyweight
17
Actor Domains:
Controlling Mutable State
Actors
STM Locks
// new shared domain
objCls = actor.newShared(Obj);
obj = objCls<-new;
obj.whenExclusive(o => {
o mutate});
// new observable domain
cntCls = actor.newObs(Counter);
cnt = cntCls<-new;
// synchronous, async. mutation
print(cnt.read());
cnt<-inc;
Actor model with
safe data parallelism
Work by Joeri De Koster
Domains: Language Abstractions for Controlling Shared Mutable State in Actor Systems
Joeri De Koster, PhD Dissertation, 2015
Actors
18
Locks
STM
Deterministic Fork/Join
19
STM
Future Promise
Work by Janwillem Swalens
Transactional Promises and Futures, Work in Progress
(Paper Draft available on request)
vec = Vector.make(10);
prom = Promise.make();
atomic {
f1 = future {
process(vec,0,4);
prom.resolve(42); // is safe
};
f2 = future {
process(vec,4,9);
prom.get(); // read dependency
};
} // throws exception on conflict
Approach: Design Combinations
…
Actors
STM Locks
STM
Actors Locks
Actors
• One dominating abstraction
• subordinates are assimilated 20
Better Insight into Building Blocks
21
To assemble useful combinations
Truffle-based Newspeak
• Class-based
• No global/static state
• Value objects
• Actors
22
NS
1.0
1.5
2.0
2.5
Bounce
BubbleSort
DeltaBlue
Fannkuch
Json
Mandelbrot
NBody
PageRank
Permute
Queens
QuickSort
Richards
Sieve
Storage
Runtimenormalized
toJava
1.65x slower than Java
min. -3%, max. 2.6x
Research Platform for Actor Domains and Other Models
Future Plans
Explore Safe Combinations
• Complex concurrent systems
– Funding proposal submitted
– Collaboration of SSW & SOFT
• Lightweight instrumentation
• Independent of Concurrency
Models
Investigate Debugging
23
• Increase Applicability
• Demonstrate Performance

More Related Content

What's hot (20)

PPTX
The Future of Node - @rvagg - NodeConf Christchurch 2015
rvagg
 
PDF
Introduction to Kotlin coroutines
Roman Elizarov
 
PPTX
Intro to data oriented design
Stoyan Nikolov
 
PDF
What make Swift Awesome
Sokna Ly
 
PPTX
Reactive Programming and RxJS
Denis Gorbunov
 
PDF
Introduction to Khronos SYCL
Min-Yih Hsu
 
PDF
Loom and concurrency latest
Srinivasan Raghavan
 
PDF
Optimising code using Span<T>
Mirco Vanini
 
PDF
Stream Processing in the Cloud - Athens Kubernetes Meetup 16.07.2019
Rafał Leszko
 
PDF
Using R in remote computer clusters
Burak Himmetoglu
 
PDF
Efficient Bytecode Analysis: Linespeed Shellcode Detection
Georg Wicherski
 
PDF
Clojure (and some lisp) in 10 mins for OO developers
Chris F Carroll
 
PDF
From V8 to Modern Compilers
Min-Yih Hsu
 
PDF
Understanding Coroutine
Justin Li
 
PDF
C# basics
Luigi Berrettini
 
ODP
Clojure
alandipert
 
PDF
Cilk - An Efficient Multithreaded Runtime System
Shareek Ahamed
 
PPTX
Iron Languages - NYC CodeCamp 2/19/2011
Jimmy Schementi
 
PDF
RxJS - The Reactive Extensions for JavaScript
Viliam Elischer
 
PPTX
Coroutines in Kotlin
Jemo Mgebrishvili
 
The Future of Node - @rvagg - NodeConf Christchurch 2015
rvagg
 
Introduction to Kotlin coroutines
Roman Elizarov
 
Intro to data oriented design
Stoyan Nikolov
 
What make Swift Awesome
Sokna Ly
 
Reactive Programming and RxJS
Denis Gorbunov
 
Introduction to Khronos SYCL
Min-Yih Hsu
 
Loom and concurrency latest
Srinivasan Raghavan
 
Optimising code using Span<T>
Mirco Vanini
 
Stream Processing in the Cloud - Athens Kubernetes Meetup 16.07.2019
Rafał Leszko
 
Using R in remote computer clusters
Burak Himmetoglu
 
Efficient Bytecode Analysis: Linespeed Shellcode Detection
Georg Wicherski
 
Clojure (and some lisp) in 10 mins for OO developers
Chris F Carroll
 
From V8 to Modern Compilers
Min-Yih Hsu
 
Understanding Coroutine
Justin Li
 
C# basics
Luigi Berrettini
 
Clojure
alandipert
 
Cilk - An Efficient Multithreaded Runtime System
Shareek Ahamed
 
Iron Languages - NYC CodeCamp 2/19/2011
Jimmy Schementi
 
RxJS - The Reactive Extensions for JavaScript
Viliam Elischer
 
Coroutines in Kotlin
Jemo Mgebrishvili
 

Similar to Why Is Concurrent Programming Hard? And What Can We Do about It? (20)

PPTX
Concurrency Constructs Overview
stasimus
 
PDF
Actors: Not Just for Movies Anymore
VictorOps
 
PPTX
Alternate concurrency models
Abid Khan
 
PDF
Concurrency and Parallelism with Scala
Timothy Perrett
 
PPTX
The Actor Model - Towards Better Concurrency
Dror Bereznitsky
 
PDF
State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVM
Jonas Bonér
 
PDF
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
Hiroshi Ono
 
PDF
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
Hiroshi Ono
 
PDF
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
Hiroshi Ono
 
PDF
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
Hiroshi Ono
 
ODP
Mario Fusco - Comparing different concurrency models on the JVM | Codemotion ...
Codemotion
 
PPTX
Concurrency - Why it's hard ?
Ramith Jayasinghe
 
PPTX
Why Concurrency is hard ?
Ramith Jayasinghe
 
PPTX
GPARS: Lessons from the parallel universe - Itamar Tayer, CoolaData
Codemotion Tel Aviv
 
PDF
Comparing different concurrency models on the JVM
Mario Fusco
 
PDF
Reactive Software Systems
Behrad Zari
 
ODP
Pick up the low-hanging concurrency fruit
Vaclav Pech
 
PDF
Sharing-akka-pub
Hendri Karisma
 
PPTX
Oop2011 actor presentation_stal
Michael Stal
 
PDF
A Survey of Concurrency Constructs
Ted Leung
 
Concurrency Constructs Overview
stasimus
 
Actors: Not Just for Movies Anymore
VictorOps
 
Alternate concurrency models
Abid Khan
 
Concurrency and Parallelism with Scala
Timothy Perrett
 
The Actor Model - Towards Better Concurrency
Dror Bereznitsky
 
State: You're Doing It Wrong - Alternative Concurrency Paradigms For The JVM
Jonas Bonér
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
Hiroshi Ono
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
Hiroshi Ono
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
Hiroshi Ono
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
Hiroshi Ono
 
Mario Fusco - Comparing different concurrency models on the JVM | Codemotion ...
Codemotion
 
Concurrency - Why it's hard ?
Ramith Jayasinghe
 
Why Concurrency is hard ?
Ramith Jayasinghe
 
GPARS: Lessons from the parallel universe - Itamar Tayer, CoolaData
Codemotion Tel Aviv
 
Comparing different concurrency models on the JVM
Mario Fusco
 
Reactive Software Systems
Behrad Zari
 
Pick up the low-hanging concurrency fruit
Vaclav Pech
 
Sharing-akka-pub
Hendri Karisma
 
Oop2011 actor presentation_stal
Michael Stal
 
A Survey of Concurrency Constructs
Ted Leung
 
Ad

More from Stefan Marr (18)

PPTX
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Stefan Marr
 
PPTX
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Stefan Marr
 
PPTX
Building High-Performance Language Implementations With Low Effort
Stefan Marr
 
PPTX
Cloud PARTE: Elastic Complex Event Processing based on Mobile Actors
Stefan Marr
 
PPTX
Supporting Concurrency Abstractions in High-level Language Virtual Machines
Stefan Marr
 
PDF
Identifying A Unifying Mechanism for the Implementation of Concurrency Abstra...
Stefan Marr
 
PDF
Sly and the RoarVM: Parallel Programming with Smalltalk
Stefan Marr
 
PDF
Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Mul...
Stefan Marr
 
PDF
PHP.next: Traits
Stefan Marr
 
PDF
The Price of the Free Lunch: Programming in the Multicore Era
Stefan Marr
 
PDF
Locality and Encapsulation: A Foundation for Concurrency Support in Multi-Lan...
Stefan Marr
 
PPTX
Insertion Tree Phasers: Efficient and Scalable Barrier Synchronization for Fi...
Stefan Marr
 
PPTX
Encapsulation and Locality: A Foundation for Concurrency Support in Multi-Lan...
Stefan Marr
 
PPTX
Intermediate Language Design of High-level Language VMs: Towards Comprehensiv...
Stefan Marr
 
PPTX
Virtual Machine Support for Many-Core Architectures: Decoupling Abstract from...
Stefan Marr
 
PDF
VMADL: An Architecture Definition Language for Variability and Composition ...
Stefan Marr
 
PPT
Metaprogrammierung und Reflection
Stefan Marr
 
PPT
Traits: A New Language Feature for PHP?
Stefan Marr
 
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Stefan Marr
 
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Stefan Marr
 
Building High-Performance Language Implementations With Low Effort
Stefan Marr
 
Cloud PARTE: Elastic Complex Event Processing based on Mobile Actors
Stefan Marr
 
Supporting Concurrency Abstractions in High-level Language Virtual Machines
Stefan Marr
 
Identifying A Unifying Mechanism for the Implementation of Concurrency Abstra...
Stefan Marr
 
Sly and the RoarVM: Parallel Programming with Smalltalk
Stefan Marr
 
Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Mul...
Stefan Marr
 
PHP.next: Traits
Stefan Marr
 
The Price of the Free Lunch: Programming in the Multicore Era
Stefan Marr
 
Locality and Encapsulation: A Foundation for Concurrency Support in Multi-Lan...
Stefan Marr
 
Insertion Tree Phasers: Efficient and Scalable Barrier Synchronization for Fi...
Stefan Marr
 
Encapsulation and Locality: A Foundation for Concurrency Support in Multi-Lan...
Stefan Marr
 
Intermediate Language Design of High-level Language VMs: Towards Comprehensiv...
Stefan Marr
 
Virtual Machine Support for Many-Core Architectures: Decoupling Abstract from...
Stefan Marr
 
VMADL: An Architecture Definition Language for Variability and Composition ...
Stefan Marr
 
Metaprogrammierung und Reflection
Stefan Marr
 
Traits: A New Language Feature for PHP?
Stefan Marr
 
Ad

Recently uploaded (20)

PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 

Why Is Concurrent Programming Hard? And What Can We Do about It?

  • 1. Why Is Concurrent Programming Hard? And What Can We Do about It? Stefan Marr Zurich, September 10, 2015
  • 2. 70 Years of Parallel Execution 2[U.S. Army Photo]
  • 3. Perhaps >3,500 Books and >100,000 Papers? 3
  • 4. … The Problem No Silver Bullet! Actors Transactional Memory Fork/Join Locks, Monitors, … 4 Data Flow
  • 5. Actors 5 Actor A Actor B Data: No Shared Memory Parallelism: Structural, Between Actors
  • 6. Actor Use Cases Hewitt/Agha Actors Communicating Event Loops 6 Finer Grained Parallel Entities Coarser Grained Subsystems User Interface Data Backend But you got to do parallel updates on graphs?
  • 7. Transactional Memory 7 Thread A Thread B Isolated Area of A Isolated Area of B
  • 8. Transactional Memory 8 Too much overhead? well structured data?Thread A Thread B Isolated Area of A Isolated Area of B
  • 11. And All Languages Got Everything • Actors, Akktors, Actorz, … • Threads, Locks • Fork/Join • Parallel Collections • Futures, Promises • Java’s util.concurrent • Channels • STM, Data Flow, … Ruby • Actors, Agents • Looks, Semaphores, Barriers • Atoms • Futures, Promises • Channels • Thread Pools • Thread-safe Array, Hash, … • STM, Data Flow, … 11
  • 12. But, Not designed for Interaction! Clojure “designed to be a [.] language [.] with an efficient and robust infrastructure for multithreaded programming.” (dosync (future fun-with-sideeffect) "...") Haskell “an advanced [.] language [.] of cutting-edge research [.] with [.] built-in concurrency and parallelism” Control.Concurrent – MVar – Chan Control.Concurrent.STM – TMVar – TChan 12
  • 13. Is it Just an Academic Issue? • Uses Locks and Atomic* • Multiple async. future/task abstractions • Multiple ‘transaction’ systems > 4500 “deadlock” bugs > 530 “race condition” bugs 13
  • 14. Is it Just an Academic Issue? 14 Jaroslav Tulach 2007-03-21 08:41:46 UTC issue 75858 - e.g. calling 3rd party code from inside of runAtomicAction method issue 85858 when the 3rd party code called other code while holding internal locks. issue 95675 that broke web team & co. and five people were hunting for it for a week From: https://netbeans.org/bugzilla/show_bug.cgi?id=97278
  • 15. WHAT CAN WE DO ABOUT IT? Concurrency without accidental complexity
  • 16. Harmonize Concurrency Abstractions Desirable Properties – Free of low-level data races – Deadlock free – … Design Dimensions – Activity granularity • Lightweight vs. heavyweight – Blocking vs. non-blocking – Isolation • Granularity • Permanent vs. temporary • Optimistic vs. pessimistic – Deterministic vs. non-deterministic – … Actors STM many degrees of design freedom 16
  • 17. Fundamental Elements as Building Blocks • Identify and formalize • Building blocks for languages and frameworks • Compose harmonious elements to guarantee – Deadlock freedom – Race freedom – … blocking non-blocking lightweight heavyweight 17
  • 18. Actor Domains: Controlling Mutable State Actors STM Locks // new shared domain objCls = actor.newShared(Obj); obj = objCls<-new; obj.whenExclusive(o => { o mutate}); // new observable domain cntCls = actor.newObs(Counter); cnt = cntCls<-new; // synchronous, async. mutation print(cnt.read()); cnt<-inc; Actor model with safe data parallelism Work by Joeri De Koster Domains: Language Abstractions for Controlling Shared Mutable State in Actor Systems Joeri De Koster, PhD Dissertation, 2015 Actors 18 Locks STM
  • 19. Deterministic Fork/Join 19 STM Future Promise Work by Janwillem Swalens Transactional Promises and Futures, Work in Progress (Paper Draft available on request) vec = Vector.make(10); prom = Promise.make(); atomic { f1 = future { process(vec,0,4); prom.resolve(42); // is safe }; f2 = future { process(vec,4,9); prom.get(); // read dependency }; } // throws exception on conflict
  • 20. Approach: Design Combinations … Actors STM Locks STM Actors Locks Actors • One dominating abstraction • subordinates are assimilated 20
  • 21. Better Insight into Building Blocks 21 To assemble useful combinations
  • 22. Truffle-based Newspeak • Class-based • No global/static state • Value objects • Actors 22 NS 1.0 1.5 2.0 2.5 Bounce BubbleSort DeltaBlue Fannkuch Json Mandelbrot NBody PageRank Permute Queens QuickSort Richards Sieve Storage Runtimenormalized toJava 1.65x slower than Java min. -3%, max. 2.6x Research Platform for Actor Domains and Other Models
  • 23. Future Plans Explore Safe Combinations • Complex concurrent systems – Funding proposal submitted – Collaboration of SSW & SOFT • Lightweight instrumentation • Independent of Concurrency Models Investigate Debugging 23 • Increase Applicability • Demonstrate Performance

Editor's Notes

  • #3: - Fun fact, parallel ISA, but not really generally practical because they didn’t have synchronizing instructions
  • #4: People have clearly been busy.
  • #5: Solutions are design/applicable/natural for small sets of problems.
  • #14: Not, let’s look at Netbeans, Jaroslav, let me know whether anything is wrong with this Not an academic problem People mix and match People suffer from bugs Argued for building different parts of a mail client with different concurrency abstractions before Looking at NetBeans and other applications, we see exactly that More than 4000 bugs with the term deadlock More
  • #19: One dominating abstraction n subordinate abstractions Direct result n+1 language designs with fully integrated concurrency abstractions Building blocks for language design Formalization based on usage scenarios Identify groups of composable blocks Some properties are inherently incompatible
  • #21: One dominating abstraction n subordinate abstractions Direct result n+1 language designs with fully integrated concurrency abstractions Building blocks for language design Formalization based on usage scenarios Identify groups of composable blocks Some properties are inherently incompatible