SlideShare a Scribd company logo
Models for Concurrent
   Programming

                          tobias@neotechnology.com
Tobias Ivarsson           twitter: @thobe
                          web: http://thobe.org/ http://neo4j.org/
hacker @ Neo Technology
Common misconceptions


                   2
More threads
      ==
More throughput

                  3
Finite number of cores


                    4
Other limiting factors
 f.ex. I/O is only one pipe


                              5
Locking always impedes performance




                              6
Concurrency on
 the track, only
   one in the
     station

           7
Amdahl’s law
                   1
      Speedup ≤
                       1-F
                  F+
                       N



         N: Number of processors
         F: Serial fraction
                                   8
Throughput with
Throughput: 3
                 synchronized
                    regions

                            9
Throughput with
Throughput: 6
                      synchronized
                         regions
           wait...




                                 9
Throughput with
                            synchronized
Throughput: 9

                               regions
           wait...
                     wait...




                                       9
Throughput with
                           synchronized
Throughput: 11
                              regions
          wait...
                    wait...
                              wait...



                                        9
Throughput with
                           synchronized
Throughput: 11                regions
                                                  wait...                                           wait...
          wait...                                           wait...                                           wait...
                    wait...                                           wait...
                              wait...                                           wait...
                                        wait...                                           wait...


                                                                                                    10
Throughput with
                           synchronized
                              regions
Throughput: 11

                                                       wait...
          wait...                                                wait...
                    wait...
                              wait...
                                        wait...
                                             wait...
                                                                           11
The fundamentals
 ๏Threads
 ๏Mutual exclusion
    synchronization and locks

 ๏Java Memory Model
    read/write barriers & publication



                                        12
The Java Memory Model                      1 33
         What you need to know            JSR
๏   Visibility / Publication of objects/fields
๏   (Un)Acceptable out-of-order behavior
    i.e. guarantees about ordering
๏ Implementations based on the
    hardware MM of the target platform


                                          13
Concurrency abstractions


                     14
Java as we know it


                     15
Threads
๏ Abstract the line of excution from the CPU(s)
๏ Provided by most (all mainstream) operating systems
๏ CPU execution can continue on another thread if
   one thread blocks


๏ Increases CPU utilization

                                                16
Monitors
synchronized (someMonitor)
{ read barrier
     // single threaded region
} write barrier




                                 17
Volatile read/write


                      18
class Thing {
    volatile String name;
    String getName() {
        return this.name; read barrier
    }
    void setName( String newName ) {
        this.name = newName; write barrier

}
    }
        ๏ Guarantees visibility:
            always read the latest value

        ๏Guarantees safe publication:
            no re-ordering of
            pre-write ops with
            post-write ops                   19
Monitors
synchronized (someMonitor)
{ read barrier
     // single threaded region
} write barrier
       ๏Writes may not be
           reordered across the end

       ๏Reads may not be
           reordered across the start
                                        20
java.util.concurrent


                   21
ConcurrentMap<String,Thing> map =
 new ConcurrentHashMap();
   ๏Adds atomic operations to the Map
     interface:
    - putIfAbsent(key, value)
    - remove(key, value)
    - replace(key,[oldVal,]newVal)
    - but not yet
       putIfAbsent(key, #{makeValue()})
  ๏CHM is lock striped, i.e. synchronized
     on regions                         22
List<Thing> list = new
 CopyOnWriteArrayList();
๏Synchronize writers,
   unrestricted readers
๏Good for: #reads >> #writes
๏Readers get snapshot state:
   gives stable iteration
๏Volatile variable for immutable
   state to ensure publication     23
public class CopyOnWriteArrayList<T>
private volatile Object[] array = new Object[0];


public synchronized boolean add(T value) {
   Object[] newArray = Arrays.copyOf(array, array.length+1);
   newArray[array.length] = value;
   array = newArray; // write barrier
   return true;
} // write barrier


public Iterator<T> iterator() {
   return new ArrayIterator<T>(this.array); // read barrier
}


private static class ArrayIterator<T> implements Iterator<T> {
   // I’ve written too many of these to be amused any more ...
}
                                                         24
ExecutorService executor = new
  ThreadPoolExecutor();

executor.submit(new Runnable() {
                   ๏
    void run() {
        doWork();   Focus on tasks - not threads
    }
});                ๏Mitigate thread start/stop
                       overhead

                   ๏Ensure a balanced number
                       of threads for the target
                       platform
                                           25
java.util.concurrent.locks


                       26
LockSupport.park();         // currentThread


LockSupport.unpark(Thread t);
  ๏The thread will “sleep” until unparked
  ๏Although unpark-before-park marks
     the thread as unparked, returning
     from park immediately
  ๏... and there’s still the chance of
     spurious wakeups ...
  ๏Too low level for most people         27
Lock lock = new ReentrantLock();

ReadWriteLock rwLock = new ReentrantReadWriteLock();

Lock read = rwLock.readLock();
                                // Two related locks
Lock write = rwLock.writeLock();

  lock.lock();
  try { doWork() } finally { lock.unlock(); }

  if ( lock.tryLock() )
     try { doWork() } finally { lock.unlock(); }
  else
     backOffAndTryAgainLater();

                                             28
java.util.concurrent.atomic


                        29
AtomicReference<Thing> ref = new AtomicReference();

AtomicReferenceArray<Thing> array = new AtomicReferenceArray();




                                                         30
AtomicReference<Thing> ref = new AtomicReference();

AtomicReferenceArray<Thing> array = new AtomicReferenceArray();

   class MyAtomicThingReference {
       volatile Thing thing;
       static AtomicReferenceFieldUpdater
        <MyAtomicThingReference,Thing> THING = newUpdater(...);

       Thing swap( Thing newThing ) {
           return THING.getAndSet( this, newThing );
       }

 ๏Atomic* gives you compareAndSet()
   }



 ๏Atomic*Updater saves indirection:
  ๏One less object header - less memory
  ๏One read-address-get-object operation:
        better cache locality
                                                         30
Java of Tomorrow
(actually Today, JDK7 is already out)




                                        31
ForkJoin
๏More “advanced” Executor
๏Assumes/requires more of
  the tasks it runs
๏Tasks first split into multiple
  sub-tasks, push on stack
๏Idle workers “steal” work
  from the bottom of the
  stack of other workers
                                  32
Models not in Java today


                     33
ParallelArray


                34
ParallelArray<Student> students = ...

double highestScore = students
    .filter( #{ Student s -> s.gradYear == 2010 } )
    .map(    #{ Student s -> s.score } )
    .max();




                                            35
Transactional Memory


                  36
void transfer( TransactionalLong source,
               TransactionalLong target,
               long amount ) {

    try ( Transaction tx = txManager.beingTransaction() ) {

        long sourceFunds = source.getValue();
        if (sourceFunds < amount) {
          throw new InsufficientFundsException();
        }
        source.setValue( sourceFunds - amount );
        target.setValue( target.getValue() + amount );

        tx.success();
    }

}
                                                     37
Actors


         38
class SimpleActor extends Actor {
  var state
  def receive = {
    case Get => self reply state
    case Set(newState) => state = newState
  }
}




                                  ge”
                                ans
                               ssa
                      “se s me
                            me
                         nd
                          i
                        Th
val response = simple !! Set( "new state" )



                                        39
Scala Parallel
Collection Framework

                  40
Efficient Collection
splitting & combining



                    41
Efficient Collection
splitting & combining



                    41
Efficient Collection
splitting & combining



                    41
Efficient Collection
splitting & combining



                    41
Splittable maps
            15



        5        174



    2       8




                       42
Splittable maps
    8       5   15




        2            174




                           43
Hash tries
๏Similar performance to hash
   tables

๏Splittable (like arrays)
๏Memory (re)allocation
   more like trees

๏No resizing races
                               44
Clojure


          45
Immutable by default


                   46
Thread local
(and scoped)
  override
               47
(def x 10) ; create a root binding


(def x 42) ; redefine the root binding


(binding [x 13] ...) ; create a thread local override




                                              48
Transactional memory
(ref) and (dosync ...)


                    49
(def street (ref))
(def city (ref))


(defn move [new-street new-city]
  (dosync ; synchronize the changes
    (ref-set street new-street)
    (ref-set city new-city)))
; will retry if txn fails due to concurrent change


(defn print-address []
  (dosync ; get a snapshot state of the refs
    (printf "I live on %s in %s%n" @street @city)))




                                               50
(atom)
easier API for AtomicReference


                           51
(defstruct address-t :street :city)


(def address (atom))


(defn move [new-street new-city]
  (set address
    (struct address-t new-street new-city)))


(defn print-address []
  (let [addr @address] ; get snapshot
    (printf "I live on %s in %s%n"
            (get addr :street)
            (get addr :city))))

                                               52
Explicit asynchronous updates



                          53
(agent)
A simpler cousin to actors


                         54
(def account (agent))


(defn deposit [balance amount]
   (+ balance amount))

(send account deposit 1000)


                              55
we’re hiring
http://neotechnology.com/about-us/jobs




           http://neotechnology.com
Questions?

More Related Content

PDF
Exploiting Concurrency with Dynamic Languages
PPTX
Seeing with Python presented at PyCon AU 2014
PDF
Virtual machine and javascript engine
PDF
The Evolution of Async-Programming on .NET Platform (TUP, Full)
PPTX
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
PDF
Javascript engine performance
PPTX
Building High-Performance Language Implementations With Low Effort
PDF
Engineering fast indexes (Deepdive)
Exploiting Concurrency with Dynamic Languages
Seeing with Python presented at PyCon AU 2014
Virtual machine and javascript engine
The Evolution of Async-Programming on .NET Platform (TUP, Full)
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Javascript engine performance
Building High-Performance Language Implementations With Low Effort
Engineering fast indexes (Deepdive)

What's hot (20)

PPTX
Node.js System: The Landing
PDF
Blocks & GCD
KEY
Java and the machine - Martijn Verburg and Kirk Pepperdine
PDF
To Swift 2...and Beyond!
PDF
Machine Trace Metrics
PDF
04 - Qt Data
ODP
Java Garbage Collection, Monitoring, and Tuning
PPT
No Heap Remote Objects for Distributed real-time Java
PDF
Overview of Chainer and Its Features
PPTX
Pune-Cocoa: Blocks and GCD
PDF
Objective-C Blocks and Grand Central Dispatch
PPT
A synchronous scheduling service for distributed real-time Java
PPT
Enhancing the region model of RTSJ
PPTX
Introduction to PyTorch
PDF
06 - Qt Communication
PPT
Deuce STM - CMP'09
PDF
Project Fortress
PDF
Start Wrap Episode 11: A New Rope
PPT
Simple asynchronous remote invocations for distributed real-time Java
Node.js System: The Landing
Blocks & GCD
Java and the machine - Martijn Verburg and Kirk Pepperdine
To Swift 2...and Beyond!
Machine Trace Metrics
04 - Qt Data
Java Garbage Collection, Monitoring, and Tuning
No Heap Remote Objects for Distributed real-time Java
Overview of Chainer and Its Features
Pune-Cocoa: Blocks and GCD
Objective-C Blocks and Grand Central Dispatch
A synchronous scheduling service for distributed real-time Java
Enhancing the region model of RTSJ
Introduction to PyTorch
06 - Qt Communication
Deuce STM - CMP'09
Project Fortress
Start Wrap Episode 11: A New Rope
Simple asynchronous remote invocations for distributed real-time Java
Ad

Viewers also liked (11)

PDF
A Better Python for the JVM
PDF
A Better Python for the JVM
PDF
JDK Power Tools
PDF
Choosing the right NOSQL database
PDF
Persistent graphs in Python with Neo4j
PDF
Building Applications with a Graph Database
PDF
NOSQL Overview
PDF
The Graph Traversal Programming Pattern
PDF
An overview of Neo4j Internals
PPT
Mixing Python and Java
PPTX
Introduction to NoSQL Databases
A Better Python for the JVM
A Better Python for the JVM
JDK Power Tools
Choosing the right NOSQL database
Persistent graphs in Python with Neo4j
Building Applications with a Graph Database
NOSQL Overview
The Graph Traversal Programming Pattern
An overview of Neo4j Internals
Mixing Python and Java
Introduction to NoSQL Databases
Ad

Similar to [JavaOne 2011] Models for Concurrent Programming (20)

PPTX
opt-mem-trx
PDF
Twisted
PDF
2021Arch_15_Ch5_3_Syncronization.pdf Synchronization in Multiprocessor
PPTX
Medical Image Processing Strategies for multi-core CPUs
PDF
Java Runtime: повседневные обязанности JVM
PDF
Java Concurrency in Practice
PDF
Scaling Apache Storm - Strata + Hadoop World 2014
PDF
Metasploit Basics
PDF
Let's Talk Locks!
PDF
Programming with Threads in Java
PDF
[Blackhat EU'14] Attacking the Linux PRNG on Android and Embedded Devices
PPT
Nodejs Intro Part One
PPTX
PPTX
Effective java - concurrency
KEY
Modern Java Concurrency
PPT
«Большие объёмы данных и сборка мусора в Java
PDF
Clojure concurrency overview
PDF
Java synchronizers
PDF
[Ruxcon 2011] Post Memory Corruption Memory Analysis
opt-mem-trx
Twisted
2021Arch_15_Ch5_3_Syncronization.pdf Synchronization in Multiprocessor
Medical Image Processing Strategies for multi-core CPUs
Java Runtime: повседневные обязанности JVM
Java Concurrency in Practice
Scaling Apache Storm - Strata + Hadoop World 2014
Metasploit Basics
Let's Talk Locks!
Programming with Threads in Java
[Blackhat EU'14] Attacking the Linux PRNG on Android and Embedded Devices
Nodejs Intro Part One
Effective java - concurrency
Modern Java Concurrency
«Большие объёмы данных и сборка мусора в Java
Clojure concurrency overview
Java synchronizers
[Ruxcon 2011] Post Memory Corruption Memory Analysis

Recently uploaded (20)

PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Modernizing your data center with Dell and AMD
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
KodekX | Application Modernization Development
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Machine learning based COVID-19 study performance prediction
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
cuic standard and advanced reporting.pdf
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Chapter 3 Spatial Domain Image Processing.pdf
Modernizing your data center with Dell and AMD
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Encapsulation_ Review paper, used for researhc scholars
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
KodekX | Application Modernization Development
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Dropbox Q2 2025 Financial Results & Investor Presentation
NewMind AI Weekly Chronicles - August'25 Week I
20250228 LYD VKU AI Blended-Learning.pptx
NewMind AI Monthly Chronicles - July 2025
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Per capita expenditure prediction using model stacking based on satellite ima...
Machine learning based COVID-19 study performance prediction
Diabetes mellitus diagnosis method based random forest with bat algorithm
Review of recent advances in non-invasive hemoglobin estimation
cuic standard and advanced reporting.pdf

[JavaOne 2011] Models for Concurrent Programming