SlideShare a Scribd company logo
Just Keep Passing
               the Messages


                                 Dr Russel Winder

                                   It’z Interactive Ltd
                                   russel@itzinteractive.com
                                   @russel_winder
Copyright © 2011 Russel Winder                                 1
Just Keep Passing
               the Messages


                                 Dr Russel Winder

                                   Concertant LLP
                                   russel.winder@concertant.com
                                   @russel_winder
Copyright © 2011 Russel Winder                                    2
Just Keep Passing
               the Messages


                                 Dr Russel Winder

                                   Independent Consultant
                                   russel@russel.org.uk
                                   @russel_winder
Copyright © 2011 Russel Winder                              3
Just Keep Passing
               the Messages


                                 Prof Russel Winder

                                   Wolverhampton University
                                   russel@russel.org.uk
                                   @russel_winder
Copyright © 2011 Russel Winder                                4
Aims and Objectives

                       ●    Investigate why message passing architectures are the
                            software architectures of the future.
                       ●    Have some fun (whilst hopefully learning something).




Copyright © 2011 Russel Winder                                                      5
Audience Aims and Objectives




                                 ?
Copyright © 2011 Russel Winder                 6
Structure of the Session

                       ●    Introduction.
                       ●    Do stuff.
                       ●    Exit stage (left|right|front|back).




                                                  There may well be significant
                                                  dynamic binding of the session.

Copyright © 2011 Russel Winder                                                      7
Protocol

                       ●    Some slides, to kick things off.
                       ●    Some programs to really demonstrate things.


                       ●    NB Interaction between audience and presenter is
                            probably mandatory.

                                     We reserve the right to (shelve|stash) for
                                     later any interaction that appears to go
                                     on longer than seems appropriate.


                                                               NB This is a 50min session!
Copyright © 2011 Russel Winder                                                               8
Enter Manic Mode




Copyright © 2011 Russel Winder                      9
BEGIN

                       ●    History is important:
                                 –   To know today, we look to yesterday. To know tomorrow,
                                     we see today as yesterday.
                                                http://wiki.answers.com/Q/Why_history_is_important
                                 –




Copyright © 2011 Russel Winder                                                                       10
Processes / Threads   Processes / RPC




                                                Threads / Shared memory



                                            Processes / IPC


                                      Multi-tasking


                                 One program at a time.

Copyright © 2011 Russel Winder                                                        11
Historical Summary

                       ●    Shared-memory multi-threading for applications
                            programming is a total aberration:
                                 –   Consequences of operating systems handling of
                                     concurrency have been imposed on all programmers.
                       ●    Cooperating processes is where applications
                            development sanity is:
                                 –   Operating system interprocess communication was slow,
                                     hence threads, but this lead directly to the shared-memory,
                                     multi-threading quagmire.
                                 –   Erlang has shown that processes and message passing can do
                                     the job properly even after the “mainstream” had rejected
                                     process-based working.

Copyright © 2011 Russel Winder                                                                     12
Concurrency
                                      vs.
                                  Parallelism




Copyright © 2011 Russel Winder                  13
Concurrency

                       ●    Running multiple tasks using time-division
                            multiplexing on a single processor.




Copyright © 2011 Russel Winder                                           14
Parallelism

                       ●    Running multiple tasks concurrently.




                                    Note that the word concurrency here is the English
                                    meaning whereas the previous slide gave the
                                    computing jargon meaning of the word.




Copyright © 2011 Russel Winder                                                           15
Concurrency . . .

                       ●    . . . is a technique required for operating systems.
                       ●    . . . can sometimes be required for applications but
                            not as much as might be thought.


                       ●    Applications can use alternative models, for example
                            event-driven systems.
                                 –   Abstract over the control flow rather than manage it with
                                     locks, semaphores, monitors, etc.




Copyright © 2011 Russel Winder                                                                   16
Parallelism . . .

                       ●    . . . is about making an algorithm execute more
                            quickly in the presence of multiple processors.
                       ●    . . . is an architectural and design issue for
                            applications.




Copyright © 2011 Russel Winder                                                17
Concurrency

                       ●    The problem with threads is shared memory:
                                 –   Without writeable shared memory there is no need for
                                     synchronization.
                       ●    Why impose a 1960s, operating system driven view of
                            concurrency management on applications
                            programmers?




Copyright © 2011 Russel Winder                                                              18
Mutable Shared Memory is . . .

                       ●    . . . anathema to parallelism.
                       ●    . . . anathema to concurrency.
                       ●    . . . anathema to modern applications programming.
                       ●    . . . anathema.




Copyright © 2011 Russel Winder                                                   19
Solution . . .

                       ●    . . . do not use mutable shared memory.




                                            Note the caveat here that opens the door
                                            to using shared immutable data.


Copyright © 2011 Russel Winder                                                         20
Operating Systems . . .

                       ●    . . . are inherently a concurrency problem.
                       ●    Applications on the other hand are not, they
                            should be using higher level abstractions.




Copyright © 2011 Russel Winder                                             21
Object
                                 Orientation




Copyright © 2011 Russel Winder                 22
Original Model

                       ●    Object-based:
                                 –   A set of (small) closed namespaces, with methods,
                                     exchanging messages requesting services.
                       ●    Object-oriented:
                                 –   Object-based plus classes and inheritance




Copyright © 2011 Russel Winder                                                           23
Implementations

                       ●    Smalltalk realized the object-oriented model
                            correctly.
                       ●    C++ did not: message passing replaced by function
                            call.



                                   C++ destroyed correct appreciation of the
                                   object-oriented model of computation.




Copyright © 2011 Russel Winder                                                  24
Non-contentious (sort of) Syllogism

                       ●    Object-orientation is
                            about objects passing
                            messages to each other:
                            object-orientation is not
                            about function call in a    ●   C++ is not an object-
                            shared memory context.          oriented programming
                       ●    C++ is a programming            language.
                            language based on
                            function call in a shared
                            memory context: C++
                            does not have objects
                            passing messages to
                            each other.
Copyright © 2011 Russel Winder                                                      25
Java




Copyright © 2011 Russel Winder          26
Object-orientation

                       ●    Java follows C++:
                                 –   Function call replaces message passing.
                       ●    Java beats C++, had threads 15 years before C++.
                       ●    Shared memory multi-threading requires all the
                            locks, semaphores, monitors, etc. and Java has it all.




                                              Java is not an object-oriented language.


Copyright © 2011 Russel Winder                                                           27
Partial Solution for JVM

                       ●    Use java.util.concurrent:
                                 –   Provides many high-level tools.
                                 –   Has many low-level tools.


                                            If you are using the low-level tools then you are lost
                                            to the cause of quality application programming.



                                     Use jsr166y (Fork/Join) and extra166y (ParallelArray) in
                                     preference to using stuff in JDK6.


                                             JDK7 has Fork/Join but not ParallelArray, still have to
                                             use extra166y for this – sadly means using jsr166y.
Copyright © 2011 Russel Winder                                                                         28
Interesting Aside

                       ●    Paul King at SpringOne2GX 2011:


                             “Who used synchronized?”
                             Some in audience raise their hands.
                             “You did it wrong!”




Copyright © 2011 Russel Winder                                     29
High Performance
                                    Computing
                                       (HPC)

                                       aka

                                 Real Computing


Copyright © 2011 Russel Winder                      30
Parallelism Rules

                       ●    HPC has been doing parallelism for 40+ years.
                       ●    Combinations of architectures:
                                 –   Vector processors
                                 –   Multi-bus multiprocessors
                                 –   Clusters




Copyright © 2011 Russel Winder                                              31
HPC Extant Solution

                       ●    Message Passing Interface (MPI)




                                     MPI addresses the problem of SPMD or MIMD
                                     parallelism in the context of multiple, possibly
                                     multicore, systems.




Copyright © 2011 Russel Winder                                                          32
HPC Proposed Solution

                       ●    Partitioned Global Address Space (PGAS)
                       ●    Champions:
                                 –   Chapel
                                 –   X10
                                 –   Fortress


                                              Structure the global address space to allow for
                                              multiple processors sharing a single memory and/or
                                              to deal with distributed memory systems.




Copyright © 2011 Russel Winder                                                                     33
Return to a Better Way




Copyright © 2011 Russel Winder                  34
Exit Manic Mode




Copyright © 2011 Russel Winder                     35
Real Solutions?

                       ●    Actor Model
                       ●    Dataflow architectures
                       ●    CSP (Communicating Sequential Processes)


              Return to a process and message passing view of applications.

                      Nothing wrong with threads as a tool.
                      The problem is using shared memory.




Copyright © 2011 Russel Winder                                                36
Return to objects passing
                           messages to each other.


                 Return to being object-oriented.




Copyright © 2011 Russel Winder                         37
Actor Model

                       ●    A program is a collection of actors that send
                            messages to each other.
                       ●    An actor is a process with a “mailbox” for receiving
                            messages.
                       ●    A mailbox is a (thread-safe) queue of messages.




Copyright © 2011 Russel Winder                                                     38
Dataflow Model

                       ●    A program is a graph of operators with some data
                            sources and some data sinks.
                       ●    An operator is an event-triggered computation with
                            some inputs and some output.
                       ●    An operator triggers for a certain state of its inputs.




Copyright © 2011 Russel Winder                                                        39
CSP is . . .

                       ●    . . . mathematics:
                                 VMS = μX. ( in2p → (chocolate → X|out1p → toffee → X)
                                      | in1p → (toffee → X|in1p → (chocolate → X|in1p → STOPαX )))

                       ●    . . . but not scary since the mathematics can be
                            hidden in an API, so it just becomes a programming
                            tool.




Copyright © 2011 Russel Winder                                                                       40
CSP

                       ●    A program is a graph of processes running a
                            sequential computation that take input from input
                            channels and write output to output channels.
                       ●    Data exchange down a channel realizes a rendezvous.




Copyright © 2011 Russel Winder                                                    41
Commentary

                       ●    Actors are non-deterministic, with chaotic
                            communications and hence complex.
                       ●    Dataflow and CSP have much greater determinism
                            with fixed communications channels.




Copyright © 2011 Russel Winder                                               42
Implementations

                       ●    Actor Model:
                                 –   JVM: GPars, Scala, Akka, Fantom
                                 –   Native: C++/Just::Thread Pro, D
                                 –   Alternative: Erlang
                       ●    Dataflow Model:
                                 –   JVM: GPars, Pervasive DataRush
                                 –   Native: C++/Just::Thread Pro
                       ●    CSP:
                                 –   JVM: GPars, JCSP
                                 –   Native: C++CSP2

Copyright © 2011 Russel Winder                                         43
Acknowledgements




Copyright © 2011 Russel Winder     44
First Example Problem

                       ●    Something small, so the code is small.
                       ●    Something not too “toy”.
                       ●    Something with good parallelism.
                                 –   Embarrassingly parallel to allow checking of scaling.




Copyright © 2011 Russel Winder                                                               45

Copyright © 2011 Russel Winder       46
What is the Value of ?

                       ●    Easy, it's known exactly, it's  (obviously).


                                                                                          †
                                                                     It's simples



                                                                            †
                                                                                Aleksandr Orlov




Copyright © 2011 Russel Winder                                                                    47
Approximating 

                       ●    What is it's value represented as a floating point
                            number?
                                 –   We can only obtain an approximation.
                                 –   A plethora of possible algorithms to choose from, a popular
                                     one is to employ the following integral equation.

                                                       1  1
                                                      =∫0       dx
                                                    4     1x 2




Copyright © 2011 Russel Winder                                                                     48
One Possible Algorithm

                       ●    Use quadrature to estimate the value of the integral
                            – which is the area under the curve.
                                           4 n            1
                                         = ∑i=1
                                           n             i−0.5 2
                                                     1      
                                                            n


                                                                  With n = 3 not much
                                                                  to do, but potentially
                                                                  lots of error.
    Embarrassingly parallel.

Copyright © 2011 Russel Winder                                                             49
Major Minor Hardware Problem

                       ●    Multiple hyperthreads per core on multicore
                            processors can be a serious waste of time.




                                              Ed: Rant about chip manufacturers and
                                              operating systems elided to avoid persecution
                                              prosecution.
Copyright © 2011 Russel Winder                                                                50
Second Example Problem

                       ●    Sleeping Barber Problem
                                 –   A barber shop has a cutting chair and some waiting chairs.
                                     The barber sleeps in the cutting chair if there are no
                                     customers. If a customer enters, the customer checks the
                                     cutting chair and wakes the barber if the barber is asleep in
                                     the chair, sits in the chair and gets a hair cut. If the
                                     entering customer sees the cutting chair in use, the
                                     customer checks to see if there is a waiting chair free. If
                                     there is the customer sits and waits, otherwise the customer
                                     leaves dissatisfied. On finishing a customer cut, the
                                     customer leaves satisfied (we assume), and the barber
                                     checks for waiting customers. If there are any waiting
                                     customers, the customer moves to the cutting chair. If
                                     there are no waiting customers, the barber returns to
                                     sleeping in the cutting chair.
Copyright © 2011 Russel Winder                                                                       51
Sleeping Barber Problem . . .

                       ●    . . . is an interesting recasting of a process
                            synchronization problem in operating systems.
                       ●    . . . is due to Edsgar Dykstra



                                 http://en.wikipedia.org/wiki/Sleeping_barber_problem




Copyright © 2011 Russel Winder                                                          52
If the examples haven't been shown
                    yet, now is the time to show them!




Copyright © 2011 Russel Winder                           53
Summary

                       ●    Multiprocessor programming is now the norm – even
                            if you don't actually need it.
                       ●    Hardware is rapidly heading towards distributed
                            memory architectures, instead of shared memory
                            multi-threading.
                       ●    Shared memory multi-threading requires locks,
                            semaphores, monitors, etc. and programmers find it
                            hard to get that stuff right.
                       ●    Actor Model, Dataflow Model, and CSP are higher
                            level abstractions of managed control flow that are
                            easier for programmers to deal with.

Copyright © 2011 Russel Winder                                                    54
Summary of the Summary

                       ●    Shared-memory multi-threading is like
                            stacks, you know it's there, but you just
                            don't worry about it.




Copyright © 2011 Russel Winder                                          55
Summary of the Summary of the
                Summary
                       ●    If you think locks, semaphores, monitors, etc. are
                            important for your work, you are either working in
                            the concurrency frameworks business (*) OR you are
                            doing it wrong.


                     (*) Which includes operating systems.




Copyright © 2011 Russel Winder                                                   56
END

                     for ( person in roomContents.collect { x -> if ( x instanceof Human ) x } ) {
                        person << "Please leave peaceably."
                     }
                     println "Goodbye all."




Copyright © 2011 Russel Winder                                                                       57
Blatant Advertising

                       Python for Rookies
                       Sarah Mount, James Shuttleworth and
                       Russel Winder
                       Thomson Learning Now called Cengage Learning.


                                          Developing Java Software Third Edition
                                          Russel Winder and Graham Roberts
                                          Wiley




                                                          Buy these books!
Copyright © 2010 Russel Winder                                                     58
Just Keep Passing
               the Messages


                                 Dr Russel Winder

                                   It’z Interactive Ltd
                                   russel@itzinteractive.com
                                   @russel_winder
Copyright © 2011 Russel Winder                                 59

More Related Content

Viewers also liked (20)

PDF
Arh2050 1730 syllabus
ProfWillAdams
 
PDF
Arh1000 sm2015 syllabus
ProfWillAdams
 
PDF
Tsahim 2
mongoo_8301
 
PPTX
Opportunity Execution Project - Career Mentor Online
Charles Sun
 
PPTX
DevOps and Performance - Why, How and Best Practices - DevOps Meetup Sydney
Andreas Grabner
 
PDF
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
JAX London
 
PDF
Embedding FreeBSD: for large and small beds
OpenFest team
 
PPT
Campus Perspectives on OpenRegistry
Jeremy Rosenberg
 
PDF
L'idrossitirosolo è in grado di proteggere e aumentare l'attività dei mitocon...
CreAgri Europe
 
PPT
Western New York Educational Service Council Presentation
UB Alberti Center for Bullying Abuse Prevention
 
PPT
Power point ulises pedro
perepay
 
ODP
Lengua anuncio
franky226
 
PDF
2008 Spring Newsletter
Direct Relief
 
DOCX
सुनामी
22456651
 
PDF
Spring Day | Spring and Scala | Eberhard Wolff
JAX London
 
PDF
Hum2220 0915 syllabus
ProfWillAdams
 
PPTX
Volunteer Recruitment & Management
Shane-C
 
PPT
Lec sequential
UmAir AsgHar
 
PDF
Measure and Learn
Andy Kaiser ™
 
PDF
Obesità e stress ossidativo: una relazione pericolosa.
CreAgri Europe
 
Arh2050 1730 syllabus
ProfWillAdams
 
Arh1000 sm2015 syllabus
ProfWillAdams
 
Tsahim 2
mongoo_8301
 
Opportunity Execution Project - Career Mentor Online
Charles Sun
 
DevOps and Performance - Why, How and Best Practices - DevOps Meetup Sydney
Andreas Grabner
 
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
JAX London
 
Embedding FreeBSD: for large and small beds
OpenFest team
 
Campus Perspectives on OpenRegistry
Jeremy Rosenberg
 
L'idrossitirosolo è in grado di proteggere e aumentare l'attività dei mitocon...
CreAgri Europe
 
Western New York Educational Service Council Presentation
UB Alberti Center for Bullying Abuse Prevention
 
Power point ulises pedro
perepay
 
Lengua anuncio
franky226
 
2008 Spring Newsletter
Direct Relief
 
सुनामी
22456651
 
Spring Day | Spring and Scala | Eberhard Wolff
JAX London
 
Hum2220 0915 syllabus
ProfWillAdams
 
Volunteer Recruitment & Management
Shane-C
 
Lec sequential
UmAir AsgHar
 
Measure and Learn
Andy Kaiser ™
 
Obesità e stress ossidativo: una relazione pericolosa.
CreAgri Europe
 

Similar to Java Tech & Tools | Just Keep Passing the Message | Russel Winder (20)

PDF
Just Keep Sending The Messages
Russel Winder
 
PDF
GPars Workshop
Russel Winder
 
PDF
It's all about processes communicating - Russel Winder
JAX London
 
PDF
It's All About Processes Communicating
Russel Winder
 
PDF
Why Go is an important programming language
Russel Winder
 
PDF
ACCU 2012: Go, D, C++ and The Multicore Revolution
Russel Winder
 
PDF
Testing: Python, Java, Groovy, etc.
Russel Winder
 
PDF
GPars 2014
Russel Winder
 
PDF
Why Groovy When Java 8 or Scala, or…
Russel Winder
 
PDF
Cocoon Best Practises
mr.quinn
 
PDF
Gant, the lightweight and Groovy targeted scripting framework
Skills Matter
 
ODP
GPars: Groovy Parallelism for Java
Russel Winder
 
PDF
User Stories Applied
IIBA UK Chapter
 
PDF
On the Architectures of Microservices: the next layer
Russel Winder
 
PDF
Tales from the Workshops
Russel Winder
 
PDF
On Concurrency and Parallelism in the JVMverse
Russel Winder
 
DOCX
Displacing the Programmers
Newton Day Uploads
 
PDF
Sly and the RoarVM: Exploring the Manycore Future of Programming
Stefan Marr
 
ODP
Zen and Enterprise Architecture
Richard Green
 
PDF
Storyteller SCMC 12/2012
markm208
 
Just Keep Sending The Messages
Russel Winder
 
GPars Workshop
Russel Winder
 
It's all about processes communicating - Russel Winder
JAX London
 
It's All About Processes Communicating
Russel Winder
 
Why Go is an important programming language
Russel Winder
 
ACCU 2012: Go, D, C++ and The Multicore Revolution
Russel Winder
 
Testing: Python, Java, Groovy, etc.
Russel Winder
 
GPars 2014
Russel Winder
 
Why Groovy When Java 8 or Scala, or…
Russel Winder
 
Cocoon Best Practises
mr.quinn
 
Gant, the lightweight and Groovy targeted scripting framework
Skills Matter
 
GPars: Groovy Parallelism for Java
Russel Winder
 
User Stories Applied
IIBA UK Chapter
 
On the Architectures of Microservices: the next layer
Russel Winder
 
Tales from the Workshops
Russel Winder
 
On Concurrency and Parallelism in the JVMverse
Russel Winder
 
Displacing the Programmers
Newton Day Uploads
 
Sly and the RoarVM: Exploring the Manycore Future of Programming
Stefan Marr
 
Zen and Enterprise Architecture
Richard Green
 
Storyteller SCMC 12/2012
markm208
 
Ad

More from JAX London (20)

PDF
Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
JAX London
 
ODP
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
JAX London
 
PDF
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
JAX London
 
PDF
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
JAX London
 
PDF
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
JAX London
 
PDF
Spring Day | Spring 3.1 in a Nutshell | Sam Brannen
JAX London
 
PDF
Spring Day | Identity Management with Spring Security | Dave Syer
JAX London
 
PDF
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
JAX London
 
PPT
Keynote | The Rise and Fall and Rise of Java | James Governor
JAX London
 
ODP
Java Tech & Tools | OSGi Best Practices | Emily Jiang
JAX London
 
PPTX
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
JAX London
 
PDF
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
JAX London
 
PDF
Java Tech & Tools | Social Media in Programming in Java | Khanderao Kand
JAX London
 
PDF
Java Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
JAX London
 
ODP
Java EE | Modular EJBs for Enterprise OSGi | Tim Ward
JAX London
 
PDF
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
JAX London
 
KEY
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
JAX London
 
PDF
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
JAX London
 
PPTX
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
JAX London
 
PPT
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
JAX London
 
Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
JAX London
 
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
JAX London
 
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
JAX London
 
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
JAX London
 
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
JAX London
 
Spring Day | Spring 3.1 in a Nutshell | Sam Brannen
JAX London
 
Spring Day | Identity Management with Spring Security | Dave Syer
JAX London
 
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
JAX London
 
Keynote | The Rise and Fall and Rise of Java | James Governor
JAX London
 
Java Tech & Tools | OSGi Best Practices | Emily Jiang
JAX London
 
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
JAX London
 
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
JAX London
 
Java Tech & Tools | Social Media in Programming in Java | Khanderao Kand
JAX London
 
Java Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
JAX London
 
Java EE | Modular EJBs for Enterprise OSGi | Tim Ward
JAX London
 
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
JAX London
 
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
JAX London
 
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
JAX London
 
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
JAX London
 
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
JAX London
 
Ad

Recently uploaded (20)

PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
PDF
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PPTX
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
PDF
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PPT
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 

Java Tech & Tools | Just Keep Passing the Message | Russel Winder

  • 1. Just Keep Passing the Messages Dr Russel Winder It’z Interactive Ltd [email protected] @russel_winder Copyright © 2011 Russel Winder 1
  • 2. Just Keep Passing the Messages Dr Russel Winder Concertant LLP [email protected] @russel_winder Copyright © 2011 Russel Winder 2
  • 3. Just Keep Passing the Messages Dr Russel Winder Independent Consultant [email protected] @russel_winder Copyright © 2011 Russel Winder 3
  • 4. Just Keep Passing the Messages Prof Russel Winder Wolverhampton University [email protected] @russel_winder Copyright © 2011 Russel Winder 4
  • 5. Aims and Objectives ● Investigate why message passing architectures are the software architectures of the future. ● Have some fun (whilst hopefully learning something). Copyright © 2011 Russel Winder 5
  • 6. Audience Aims and Objectives ? Copyright © 2011 Russel Winder 6
  • 7. Structure of the Session ● Introduction. ● Do stuff. ● Exit stage (left|right|front|back). There may well be significant dynamic binding of the session. Copyright © 2011 Russel Winder 7
  • 8. Protocol ● Some slides, to kick things off. ● Some programs to really demonstrate things. ● NB Interaction between audience and presenter is probably mandatory. We reserve the right to (shelve|stash) for later any interaction that appears to go on longer than seems appropriate. NB This is a 50min session! Copyright © 2011 Russel Winder 8
  • 9. Enter Manic Mode Copyright © 2011 Russel Winder 9
  • 10. BEGIN ● History is important: – To know today, we look to yesterday. To know tomorrow, we see today as yesterday. http://wiki.answers.com/Q/Why_history_is_important – Copyright © 2011 Russel Winder 10
  • 11. Processes / Threads Processes / RPC Threads / Shared memory Processes / IPC Multi-tasking One program at a time. Copyright © 2011 Russel Winder 11
  • 12. Historical Summary ● Shared-memory multi-threading for applications programming is a total aberration: – Consequences of operating systems handling of concurrency have been imposed on all programmers. ● Cooperating processes is where applications development sanity is: – Operating system interprocess communication was slow, hence threads, but this lead directly to the shared-memory, multi-threading quagmire. – Erlang has shown that processes and message passing can do the job properly even after the “mainstream” had rejected process-based working. Copyright © 2011 Russel Winder 12
  • 13. Concurrency vs. Parallelism Copyright © 2011 Russel Winder 13
  • 14. Concurrency ● Running multiple tasks using time-division multiplexing on a single processor. Copyright © 2011 Russel Winder 14
  • 15. Parallelism ● Running multiple tasks concurrently. Note that the word concurrency here is the English meaning whereas the previous slide gave the computing jargon meaning of the word. Copyright © 2011 Russel Winder 15
  • 16. Concurrency . . . ● . . . is a technique required for operating systems. ● . . . can sometimes be required for applications but not as much as might be thought. ● Applications can use alternative models, for example event-driven systems. – Abstract over the control flow rather than manage it with locks, semaphores, monitors, etc. Copyright © 2011 Russel Winder 16
  • 17. Parallelism . . . ● . . . is about making an algorithm execute more quickly in the presence of multiple processors. ● . . . is an architectural and design issue for applications. Copyright © 2011 Russel Winder 17
  • 18. Concurrency ● The problem with threads is shared memory: – Without writeable shared memory there is no need for synchronization. ● Why impose a 1960s, operating system driven view of concurrency management on applications programmers? Copyright © 2011 Russel Winder 18
  • 19. Mutable Shared Memory is . . . ● . . . anathema to parallelism. ● . . . anathema to concurrency. ● . . . anathema to modern applications programming. ● . . . anathema. Copyright © 2011 Russel Winder 19
  • 20. Solution . . . ● . . . do not use mutable shared memory. Note the caveat here that opens the door to using shared immutable data. Copyright © 2011 Russel Winder 20
  • 21. Operating Systems . . . ● . . . are inherently a concurrency problem. ● Applications on the other hand are not, they should be using higher level abstractions. Copyright © 2011 Russel Winder 21
  • 22. Object Orientation Copyright © 2011 Russel Winder 22
  • 23. Original Model ● Object-based: – A set of (small) closed namespaces, with methods, exchanging messages requesting services. ● Object-oriented: – Object-based plus classes and inheritance Copyright © 2011 Russel Winder 23
  • 24. Implementations ● Smalltalk realized the object-oriented model correctly. ● C++ did not: message passing replaced by function call. C++ destroyed correct appreciation of the object-oriented model of computation. Copyright © 2011 Russel Winder 24
  • 25. Non-contentious (sort of) Syllogism ● Object-orientation is about objects passing messages to each other: object-orientation is not about function call in a ● C++ is not an object- shared memory context. oriented programming ● C++ is a programming language. language based on function call in a shared memory context: C++ does not have objects passing messages to each other. Copyright © 2011 Russel Winder 25
  • 26. Java Copyright © 2011 Russel Winder 26
  • 27. Object-orientation ● Java follows C++: – Function call replaces message passing. ● Java beats C++, had threads 15 years before C++. ● Shared memory multi-threading requires all the locks, semaphores, monitors, etc. and Java has it all. Java is not an object-oriented language. Copyright © 2011 Russel Winder 27
  • 28. Partial Solution for JVM ● Use java.util.concurrent: – Provides many high-level tools. – Has many low-level tools. If you are using the low-level tools then you are lost to the cause of quality application programming. Use jsr166y (Fork/Join) and extra166y (ParallelArray) in preference to using stuff in JDK6. JDK7 has Fork/Join but not ParallelArray, still have to use extra166y for this – sadly means using jsr166y. Copyright © 2011 Russel Winder 28
  • 29. Interesting Aside ● Paul King at SpringOne2GX 2011: “Who used synchronized?” Some in audience raise their hands. “You did it wrong!” Copyright © 2011 Russel Winder 29
  • 30. High Performance Computing (HPC) aka Real Computing Copyright © 2011 Russel Winder 30
  • 31. Parallelism Rules ● HPC has been doing parallelism for 40+ years. ● Combinations of architectures: – Vector processors – Multi-bus multiprocessors – Clusters Copyright © 2011 Russel Winder 31
  • 32. HPC Extant Solution ● Message Passing Interface (MPI) MPI addresses the problem of SPMD or MIMD parallelism in the context of multiple, possibly multicore, systems. Copyright © 2011 Russel Winder 32
  • 33. HPC Proposed Solution ● Partitioned Global Address Space (PGAS) ● Champions: – Chapel – X10 – Fortress Structure the global address space to allow for multiple processors sharing a single memory and/or to deal with distributed memory systems. Copyright © 2011 Russel Winder 33
  • 34. Return to a Better Way Copyright © 2011 Russel Winder 34
  • 35. Exit Manic Mode Copyright © 2011 Russel Winder 35
  • 36. Real Solutions? ● Actor Model ● Dataflow architectures ● CSP (Communicating Sequential Processes) Return to a process and message passing view of applications. Nothing wrong with threads as a tool. The problem is using shared memory. Copyright © 2011 Russel Winder 36
  • 37. Return to objects passing messages to each other. Return to being object-oriented. Copyright © 2011 Russel Winder 37
  • 38. Actor Model ● A program is a collection of actors that send messages to each other. ● An actor is a process with a “mailbox” for receiving messages. ● A mailbox is a (thread-safe) queue of messages. Copyright © 2011 Russel Winder 38
  • 39. Dataflow Model ● A program is a graph of operators with some data sources and some data sinks. ● An operator is an event-triggered computation with some inputs and some output. ● An operator triggers for a certain state of its inputs. Copyright © 2011 Russel Winder 39
  • 40. CSP is . . . ● . . . mathematics: VMS = μX. ( in2p → (chocolate → X|out1p → toffee → X) | in1p → (toffee → X|in1p → (chocolate → X|in1p → STOPαX ))) ● . . . but not scary since the mathematics can be hidden in an API, so it just becomes a programming tool. Copyright © 2011 Russel Winder 40
  • 41. CSP ● A program is a graph of processes running a sequential computation that take input from input channels and write output to output channels. ● Data exchange down a channel realizes a rendezvous. Copyright © 2011 Russel Winder 41
  • 42. Commentary ● Actors are non-deterministic, with chaotic communications and hence complex. ● Dataflow and CSP have much greater determinism with fixed communications channels. Copyright © 2011 Russel Winder 42
  • 43. Implementations ● Actor Model: – JVM: GPars, Scala, Akka, Fantom – Native: C++/Just::Thread Pro, D – Alternative: Erlang ● Dataflow Model: – JVM: GPars, Pervasive DataRush – Native: C++/Just::Thread Pro ● CSP: – JVM: GPars, JCSP – Native: C++CSP2 Copyright © 2011 Russel Winder 43
  • 45. First Example Problem ● Something small, so the code is small. ● Something not too “toy”. ● Something with good parallelism. – Embarrassingly parallel to allow checking of scaling. Copyright © 2011 Russel Winder 45
  • 46.  Copyright © 2011 Russel Winder 46
  • 47. What is the Value of ? ● Easy, it's known exactly, it's  (obviously). † It's simples † Aleksandr Orlov Copyright © 2011 Russel Winder 47
  • 48. Approximating  ● What is it's value represented as a floating point number? – We can only obtain an approximation. – A plethora of possible algorithms to choose from, a popular one is to employ the following integral equation.  1 1 =∫0 dx 4 1x 2 Copyright © 2011 Russel Winder 48
  • 49. One Possible Algorithm ● Use quadrature to estimate the value of the integral – which is the area under the curve. 4 n 1 = ∑i=1 n i−0.5 2 1  n With n = 3 not much to do, but potentially lots of error. Embarrassingly parallel. Copyright © 2011 Russel Winder 49
  • 50. Major Minor Hardware Problem ● Multiple hyperthreads per core on multicore processors can be a serious waste of time. Ed: Rant about chip manufacturers and operating systems elided to avoid persecution prosecution. Copyright © 2011 Russel Winder 50
  • 51. Second Example Problem ● Sleeping Barber Problem – A barber shop has a cutting chair and some waiting chairs. The barber sleeps in the cutting chair if there are no customers. If a customer enters, the customer checks the cutting chair and wakes the barber if the barber is asleep in the chair, sits in the chair and gets a hair cut. If the entering customer sees the cutting chair in use, the customer checks to see if there is a waiting chair free. If there is the customer sits and waits, otherwise the customer leaves dissatisfied. On finishing a customer cut, the customer leaves satisfied (we assume), and the barber checks for waiting customers. If there are any waiting customers, the customer moves to the cutting chair. If there are no waiting customers, the barber returns to sleeping in the cutting chair. Copyright © 2011 Russel Winder 51
  • 52. Sleeping Barber Problem . . . ● . . . is an interesting recasting of a process synchronization problem in operating systems. ● . . . is due to Edsgar Dykstra http://en.wikipedia.org/wiki/Sleeping_barber_problem Copyright © 2011 Russel Winder 52
  • 53. If the examples haven't been shown yet, now is the time to show them! Copyright © 2011 Russel Winder 53
  • 54. Summary ● Multiprocessor programming is now the norm – even if you don't actually need it. ● Hardware is rapidly heading towards distributed memory architectures, instead of shared memory multi-threading. ● Shared memory multi-threading requires locks, semaphores, monitors, etc. and programmers find it hard to get that stuff right. ● Actor Model, Dataflow Model, and CSP are higher level abstractions of managed control flow that are easier for programmers to deal with. Copyright © 2011 Russel Winder 54
  • 55. Summary of the Summary ● Shared-memory multi-threading is like stacks, you know it's there, but you just don't worry about it. Copyright © 2011 Russel Winder 55
  • 56. Summary of the Summary of the Summary ● If you think locks, semaphores, monitors, etc. are important for your work, you are either working in the concurrency frameworks business (*) OR you are doing it wrong. (*) Which includes operating systems. Copyright © 2011 Russel Winder 56
  • 57. END for ( person in roomContents.collect { x -> if ( x instanceof Human ) x } ) { person << "Please leave peaceably." } println "Goodbye all." Copyright © 2011 Russel Winder 57
  • 58. Blatant Advertising Python for Rookies Sarah Mount, James Shuttleworth and Russel Winder Thomson Learning Now called Cengage Learning. Developing Java Software Third Edition Russel Winder and Graham Roberts Wiley Buy these books! Copyright © 2010 Russel Winder 58
  • 59. Just Keep Passing the Messages Dr Russel Winder It’z Interactive Ltd [email protected] @russel_winder Copyright © 2011 Russel Winder 59