SlideShare a Scribd company logo
1 of 31
Download to read offline
How Do You Solve a Problem Like
        Santa Claus ?
      Prototyping Join Patterns with
     stackless.py for Stackless Python
              Andrew Francis
         af.stackless@gmail.com
           Montreal Python 26
           December 17th, 2011
Exploring           Feedback
         Play
                      Fearless Programming
 Trial-and-error
                                 Learning
   Serendipity      Syncretism

Innovation      Baling wire and Chewing Gum

      Challenges        Friendship
The Santa Claus Problem

Santa repeatedly sleeps until wakened by either all of his nine rein-
deer, back from their holidays, or by a group of three of his ten
elves. If awakened by the reindeer, he harnesses each of them to his
sleigh, delivers toys with them and finally unharnesses them
(allowing them to go off on holiday). If awakened by a group of
elves, he shows each of the group into his study, consults with them
on toy R&D and finally shows them each out (allowing them to go
back to work).

Santa should give priority to the reindeer in the case that there is
both a group of elves and a group of reindeer waiting.
Perception




Taken from The Santa Claus Problem: Thread Synchronization
Reality




http://www.youtube.com/watch?v=pqO6tKN2lc4
Solutions Through The Years

Year    Language        Mechanism
1994    C               Semaphores
1997    Ada 95          Protected objects,
                        Rendezvous (select)
2003    Polyphonic C#   Join Patterns
2007    Haskell         Software
                        Transactional
                        Memory
Join Patterns a la Polyphonic C#
 class Join2 {
    void wait(out int i, out int j)
    & async first(int r1)
    & async second(int r2) {
          i = r1; j = r2; return;
    }
 }

 //client code
 int i,j;
 Join2 x = new Join2();
 ...
 //synchronous method will block
 x.wait(i,j);
 // do something with i and j
Chord Rules
• When pending method calls match a pattern, its
  body runs.
• If there is no match, the invocations are queued
  up.
• If there are several matches, an unspecified
  pattern is selected.
• If receiver is synchronous, body executes in
  receiver’s thread.
• If only asynchronous methods, the body runs in a
  new thread.
Stackless Python
• Superset of CPython.
  – Inspired by Bell Labs Limbo language
• Reputation for user space threads too cheap
  to meter.
• Cooperative and pre-emptive multi-tasking.
Example
import stackless

def producer(aChannel):
    aChannel.send("hello")

def consumer(aChannel):
    print aChannel.receive()

aChannel = stackless.channel()
stackless.tasklet(producer)(aChannel)
stackless.tasklet(consumer)(aChannel)
stackless.schedule()
Synchronous Channels
Before: [producer, …+scheduler
        (producer, send,“hello”) -> [ ] receive

After : [producer]scheduler
        * (producer, send, “hello”) ]send

Before: (consumer, receive, null) -> [(Producer)]send
After: (1) consumer.val = “hello”
       (2) [(producer, send, “hello”),…]send
       (3) *…, Producer+scheduler
The Select Algorithm
Question


Question: Why is knowing about
select() important?
Answers
• Stackless Python did not originally implement
  select().
  – This is proof-of-concept that we can modify
    stackless.py to create new features
• Select() is used under the hood to implement
  join patterns
• We are going to extend the select algorithm
  developed in “Prototyping Go’s Select with
  stackless.py” to include join patterns.
Christian Tismer’s Sleight of Hand
• Stackless Python does not support select()
• Eliminated a queue
• Created a channel property: balance
  – > 0 : senders on the queue
  – < 0 : receivers on the queue
  – 0: empty
stackless.py
• A PyPy module that implements the Stackless
  Python API
• Written in Python!
• Low level concurrency provided by different
  packages
  – greenlets
  – Continulets
Strategy
• Implemented sub-set of join pattern’s
  behaviour
  – Synchronous receiver
  – No built-in asynchrony


• object.method = channel.receive()
  – i.e., join2.wait() equivalent to join2.receive()
  – Simplifies API
Strategy
• Why implement a method body (and class) for
  synchronization patterns?
  – we already have channels.
  – Message bodies seem to exist to store internal
    messages and compute a return value ?
• Rather
  – return all internally queued values associated with
    pattern.
  – let receiver decide what to do.
Another Sleight of Hand

              JoinPattern

     action()
                      chanop     chanop         chanop
      add()

     ready()

    remove()




-   A join pattern is a composite channel operation
-   A join pattern uses the same interface as a channel
    operation
-   Now we can express disjunctions of conjunctions!
Famous Last Words
(Le Mot de Cambronne)
“All or Nothing” (“Atomicity”)

   (Dancer), (Dasher),(Vixen),(Comet),(Cupid),(Doner),(Blitzen),(Rudolph)


                                                                (“stackless scheduler”)

                                                                     application

 Reindeer Join Pattern

(Dancer), (Dasher),(Vixen),(Comet),(Cupid),(Doner),(Blitzen),(Rudolph)



       Transfer all the data if and only if all nine reindeer
       channels are ready
New Rules

Postpone Rendezvous (lazy acquire)

Before: (rudolph, S, msg) -> [(Santa,JR) ] rudolph-receive
After : [ (rudolph,join-send, msg) ]rudolph-send


Steal

Before: (Mrs Claus, R, Null) -> [(rudolph,JS,msg)send
After : Mrs Claus.val = msg
        [(Santa,JR) ] rudolph-receive
Words of Wisdom

Hence plan to throw one away; you
will, anyhow.

--Fred Brooks (on pilot projects)
Lessons Learnt
• Asynchrony matters
  – Prototype not powerful enough to handle Dining
    Philosophers
  – Synchronous channels with buffers.
• Atomicity a powerful feature.
  – In case of Dining Philosophers, just does the right
    thing
• “Transactional” logic and expressiveness
  come to the forefront quickly.
Status
• Prototype is still held together by baling wire
  and chewing gum.
• A lot of work needs to be done before it is
  prime time
A New Language: Conversation with
   Scalable Join Pattern’s Authors

            Concurrent ML
                                     Atomic transactions

 Transactional events
                               Eager and lazy acquire

        Composibility
                               Lock-free data structures
Optimistic locking protocols

                     Inevitability
The Ghosts of Software Present, Past,
            and Future
            The Present: Concurrent ML:
                   guard(event, f)

  The Past: Chandler Notification Manager 2.0 (R.I.P):
       eval(“city == MTL and band == Interpol”)

    The Future: C.E.P & S.0.A with Stackless Python:
   Guard(function(chanop.val), concertFeedChannel)
 return eval(“city=MTL and band==Hannah Georgas”)
References
•   The Santa Claus Problem: Thread Synchronization,
    http://www.youtube.com/watch?v=pqO6tKN2lc4
•   Scalable Join Patterns, Claudo Russo & Aaron Turon,
    http://www.ccs.neu.edu/home/turon/scalable-joins.pdf
•   Jingle Bells, Solving the Santa Claus Problem in Polyphonic #C,
    http://research.microsoft.com/en-us/um/people/nick/polyphony/
•   The Polyphonic #C Bedroom Poster, http://research.microsoft.com/en-
    us/um/people/nick/polyphony/polyphoniccsharpposter2002.ppt
•   http://swtch.com/usr/local/plan9/src/libthread/channel.c, Russ Cox
•   Concurrent Programming in ML.
    John H. Reppy. Cambridge University Press, Cambridge, England, 1999.
•   The Notification Manager, http://www.osafoundation.org/archives/2003_11.html
•   stackless.py (with select),
    http://stacklessexamples.googlecode.com/svn/trunk/sandbox/select/stackless.py
•   Prototyping Go’s Select with stackless.py for Stackless Python,
    http://andrewfr.files.wordpress.com/2010/07/july31revised.pdf
For More information



http://andrewfr.wordpress.com
Joyeux Noël

More Related Content

What's hot

What is TensorFlow? | Introduction to TensorFlow | TensorFlow Tutorial For Be...
What is TensorFlow? | Introduction to TensorFlow | TensorFlow Tutorial For Be...What is TensorFlow? | Introduction to TensorFlow | TensorFlow Tutorial For Be...
What is TensorFlow? | Introduction to TensorFlow | TensorFlow Tutorial For Be...
Simplilearn
 
Modeling Electronic Health Records with Recurrent Neural Networks
Modeling Electronic Health Records with Recurrent Neural NetworksModeling Electronic Health Records with Recurrent Neural Networks
Modeling Electronic Health Records with Recurrent Neural Networks
Josh Patterson
 

What's hot (9)

What is TensorFlow? | Introduction to TensorFlow | TensorFlow Tutorial For Be...
What is TensorFlow? | Introduction to TensorFlow | TensorFlow Tutorial For Be...What is TensorFlow? | Introduction to TensorFlow | TensorFlow Tutorial For Be...
What is TensorFlow? | Introduction to TensorFlow | TensorFlow Tutorial For Be...
 
Introduction to TensorFlow 2.0
Introduction to TensorFlow 2.0Introduction to TensorFlow 2.0
Introduction to TensorFlow 2.0
 
Anil Thomas - Object recognition
Anil Thomas - Object recognitionAnil Thomas - Object recognition
Anil Thomas - Object recognition
 
Modeling Electronic Health Records with Recurrent Neural Networks
Modeling Electronic Health Records with Recurrent Neural NetworksModeling Electronic Health Records with Recurrent Neural Networks
Modeling Electronic Health Records with Recurrent Neural Networks
 
Deep Learning through Examples
Deep Learning through ExamplesDeep Learning through Examples
Deep Learning through Examples
 
Math synonyms
Math synonymsMath synonyms
Math synonyms
 
Sync considered unethical
Sync considered unethicalSync considered unethical
Sync considered unethical
 
2017 10 17_quantum_program_v2
2017 10 17_quantum_program_v22017 10 17_quantum_program_v2
2017 10 17_quantum_program_v2
 
Quantum programming
Quantum programmingQuantum programming
Quantum programming
 

Viewers also liked

Mp26 : Tachyon, sloppiness is bliss
Mp26 : Tachyon, sloppiness is blissMp26 : Tachyon, sloppiness is bliss
Mp26 : Tachyon, sloppiness is bliss
Montreal Python
 
Mp25: Optical Music Recognition with Python
Mp25: Optical Music Recognition with PythonMp25: Optical Music Recognition with Python
Mp25: Optical Music Recognition with Python
Montreal Python
 
Mp25 Message Switching for Actor Based Designs
Mp25 Message Switching for Actor Based DesignsMp25 Message Switching for Actor Based Designs
Mp25 Message Switching for Actor Based Designs
Montreal Python
 
Mp24: Fabulous Mobile Development with and without Python
Mp24: Fabulous Mobile Development with and without PythonMp24: Fabulous Mobile Development with and without Python
Mp24: Fabulous Mobile Development with and without Python
Montreal Python
 
Mp26 : Connecting Startups with Talents
Mp26 : Connecting Startups with TalentsMp26 : Connecting Startups with Talents
Mp26 : Connecting Startups with Talents
Montreal Python
 
Mp25: Audio Fingerprinting and metadata correction with Python
Mp25: Audio Fingerprinting and metadata correction with PythonMp25: Audio Fingerprinting and metadata correction with Python
Mp25: Audio Fingerprinting and metadata correction with Python
Montreal Python
 
Mp24: The Bachelor, a facebook game
Mp24: The Bachelor, a facebook gameMp24: The Bachelor, a facebook game
Mp24: The Bachelor, a facebook game
Montreal Python
 

Viewers also liked (7)

Mp26 : Tachyon, sloppiness is bliss
Mp26 : Tachyon, sloppiness is blissMp26 : Tachyon, sloppiness is bliss
Mp26 : Tachyon, sloppiness is bliss
 
Mp25: Optical Music Recognition with Python
Mp25: Optical Music Recognition with PythonMp25: Optical Music Recognition with Python
Mp25: Optical Music Recognition with Python
 
Mp25 Message Switching for Actor Based Designs
Mp25 Message Switching for Actor Based DesignsMp25 Message Switching for Actor Based Designs
Mp25 Message Switching for Actor Based Designs
 
Mp24: Fabulous Mobile Development with and without Python
Mp24: Fabulous Mobile Development with and without PythonMp24: Fabulous Mobile Development with and without Python
Mp24: Fabulous Mobile Development with and without Python
 
Mp26 : Connecting Startups with Talents
Mp26 : Connecting Startups with TalentsMp26 : Connecting Startups with Talents
Mp26 : Connecting Startups with Talents
 
Mp25: Audio Fingerprinting and metadata correction with Python
Mp25: Audio Fingerprinting and metadata correction with PythonMp25: Audio Fingerprinting and metadata correction with Python
Mp25: Audio Fingerprinting and metadata correction with Python
 
Mp24: The Bachelor, a facebook game
Mp24: The Bachelor, a facebook gameMp24: The Bachelor, a facebook game
Mp24: The Bachelor, a facebook game
 

Similar to Mp26 : How do you Solve a Problem like Santa Claus?

Presentation of GetTogether on Functional Programming
Presentation of GetTogether on Functional ProgrammingPresentation of GetTogether on Functional Programming
Presentation of GetTogether on Functional Programming
Filip De Sutter
 
Peter Norvig - NYC Machine Learning 2013
Peter Norvig - NYC Machine Learning 2013Peter Norvig - NYC Machine Learning 2013
Peter Norvig - NYC Machine Learning 2013
Michael Scovetta
 
Next.ml Boston: Data Science Dev Ops
Next.ml Boston: Data Science Dev OpsNext.ml Boston: Data Science Dev Ops
Next.ml Boston: Data Science Dev Ops
Eric Chiang
 
Threading Is Not A Model
Threading Is Not A ModelThreading Is Not A Model
Threading Is Not A Model
guest2a5acfb
 
Separating Hype from Reality in Deep Learning with Sameer Farooqui
 Separating Hype from Reality in Deep Learning with Sameer Farooqui Separating Hype from Reality in Deep Learning with Sameer Farooqui
Separating Hype from Reality in Deep Learning with Sameer Farooqui
Databricks
 

Similar to Mp26 : How do you Solve a Problem like Santa Claus? (20)

Music recommendations @ MLConf 2014
Music recommendations @ MLConf 2014Music recommendations @ MLConf 2014
Music recommendations @ MLConf 2014
 
The Nature of Code via Cinder - Modeling the Natural World in C++
The Nature of Code via Cinder - Modeling the Natural World in C++The Nature of Code via Cinder - Modeling the Natural World in C++
The Nature of Code via Cinder - Modeling the Natural World in C++
 
Cuckoo Search Algorithm: An Introduction
Cuckoo Search Algorithm: An IntroductionCuckoo Search Algorithm: An Introduction
Cuckoo Search Algorithm: An Introduction
 
Using R in remote computer clusters
Using R in remote computer clustersUsing R in remote computer clusters
Using R in remote computer clusters
 
H2O Open Source Deep Learning, Arno Candel 03-20-14
H2O Open Source Deep Learning, Arno Candel 03-20-14H2O Open Source Deep Learning, Arno Candel 03-20-14
H2O Open Source Deep Learning, Arno Candel 03-20-14
 
Inferno Scalable Deep Learning on Spark
Inferno Scalable Deep Learning on SparkInferno Scalable Deep Learning on Spark
Inferno Scalable Deep Learning on Spark
 
Internet of Things Data Science
Internet of Things Data ScienceInternet of Things Data Science
Internet of Things Data Science
 
Online learning, Vowpal Wabbit and Hadoop
Online learning, Vowpal Wabbit and HadoopOnline learning, Vowpal Wabbit and Hadoop
Online learning, Vowpal Wabbit and Hadoop
 
Automatically Tolerating And Correcting Memory Errors
Automatically Tolerating And Correcting Memory ErrorsAutomatically Tolerating And Correcting Memory Errors
Automatically Tolerating And Correcting Memory Errors
 
Presentation of GetTogether on Functional Programming
Presentation of GetTogether on Functional ProgrammingPresentation of GetTogether on Functional Programming
Presentation of GetTogether on Functional Programming
 
ScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin Odersky
 
Pwl rewal-slideshare
Pwl rewal-slidesharePwl rewal-slideshare
Pwl rewal-slideshare
 
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
 
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
 
Peter Norvig - NYC Machine Learning 2013
Peter Norvig - NYC Machine Learning 2013Peter Norvig - NYC Machine Learning 2013
Peter Norvig - NYC Machine Learning 2013
 
Next.ml Boston: Data Science Dev Ops
Next.ml Boston: Data Science Dev OpsNext.ml Boston: Data Science Dev Ops
Next.ml Boston: Data Science Dev Ops
 
Java and Deep Learning (Introduction)
Java and Deep Learning (Introduction)Java and Deep Learning (Introduction)
Java and Deep Learning (Introduction)
 
Threading Is Not A Model
Threading Is Not A ModelThreading Is Not A Model
Threading Is Not A Model
 
Fast Single-pass K-means Clusterting at Oxford
Fast Single-pass K-means Clusterting at Oxford Fast Single-pass K-means Clusterting at Oxford
Fast Single-pass K-means Clusterting at Oxford
 
Separating Hype from Reality in Deep Learning with Sameer Farooqui
 Separating Hype from Reality in Deep Learning with Sameer Farooqui Separating Hype from Reality in Deep Learning with Sameer Farooqui
Separating Hype from Reality in Deep Learning with Sameer Farooqui
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
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
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
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
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 

Mp26 : How do you Solve a Problem like Santa Claus?

  • 1. How Do You Solve a Problem Like Santa Claus ? Prototyping Join Patterns with stackless.py for Stackless Python Andrew Francis af.stackless@gmail.com Montreal Python 26 December 17th, 2011
  • 2. Exploring Feedback Play Fearless Programming Trial-and-error Learning Serendipity Syncretism Innovation Baling wire and Chewing Gum Challenges Friendship
  • 3. The Santa Claus Problem Santa repeatedly sleeps until wakened by either all of his nine rein- deer, back from their holidays, or by a group of three of his ten elves. If awakened by the reindeer, he harnesses each of them to his sleigh, delivers toys with them and finally unharnesses them (allowing them to go off on holiday). If awakened by a group of elves, he shows each of the group into his study, consults with them on toy R&D and finally shows them each out (allowing them to go back to work). Santa should give priority to the reindeer in the case that there is both a group of elves and a group of reindeer waiting.
  • 4. Perception Taken from The Santa Claus Problem: Thread Synchronization
  • 6. Solutions Through The Years Year Language Mechanism 1994 C Semaphores 1997 Ada 95 Protected objects, Rendezvous (select) 2003 Polyphonic C# Join Patterns 2007 Haskell Software Transactional Memory
  • 7. Join Patterns a la Polyphonic C# class Join2 { void wait(out int i, out int j) & async first(int r1) & async second(int r2) { i = r1; j = r2; return; } } //client code int i,j; Join2 x = new Join2(); ... //synchronous method will block x.wait(i,j); // do something with i and j
  • 8. Chord Rules • When pending method calls match a pattern, its body runs. • If there is no match, the invocations are queued up. • If there are several matches, an unspecified pattern is selected. • If receiver is synchronous, body executes in receiver’s thread. • If only asynchronous methods, the body runs in a new thread.
  • 9. Stackless Python • Superset of CPython. – Inspired by Bell Labs Limbo language • Reputation for user space threads too cheap to meter. • Cooperative and pre-emptive multi-tasking.
  • 10. Example import stackless def producer(aChannel): aChannel.send("hello") def consumer(aChannel): print aChannel.receive() aChannel = stackless.channel() stackless.tasklet(producer)(aChannel) stackless.tasklet(consumer)(aChannel) stackless.schedule()
  • 11. Synchronous Channels Before: [producer, …+scheduler (producer, send,“hello”) -> [ ] receive After : [producer]scheduler * (producer, send, “hello”) ]send Before: (consumer, receive, null) -> [(Producer)]send After: (1) consumer.val = “hello” (2) [(producer, send, “hello”),…]send (3) *…, Producer+scheduler
  • 13. Question Question: Why is knowing about select() important?
  • 14. Answers • Stackless Python did not originally implement select(). – This is proof-of-concept that we can modify stackless.py to create new features • Select() is used under the hood to implement join patterns • We are going to extend the select algorithm developed in “Prototyping Go’s Select with stackless.py” to include join patterns.
  • 15. Christian Tismer’s Sleight of Hand • Stackless Python does not support select() • Eliminated a queue • Created a channel property: balance – > 0 : senders on the queue – < 0 : receivers on the queue – 0: empty
  • 16. stackless.py • A PyPy module that implements the Stackless Python API • Written in Python! • Low level concurrency provided by different packages – greenlets – Continulets
  • 17. Strategy • Implemented sub-set of join pattern’s behaviour – Synchronous receiver – No built-in asynchrony • object.method = channel.receive() – i.e., join2.wait() equivalent to join2.receive() – Simplifies API
  • 18. Strategy • Why implement a method body (and class) for synchronization patterns? – we already have channels. – Message bodies seem to exist to store internal messages and compute a return value ? • Rather – return all internally queued values associated with pattern. – let receiver decide what to do.
  • 19. Another Sleight of Hand JoinPattern action() chanop chanop chanop add() ready() remove() - A join pattern is a composite channel operation - A join pattern uses the same interface as a channel operation - Now we can express disjunctions of conjunctions!
  • 20. Famous Last Words (Le Mot de Cambronne)
  • 21. “All or Nothing” (“Atomicity”) (Dancer), (Dasher),(Vixen),(Comet),(Cupid),(Doner),(Blitzen),(Rudolph) (“stackless scheduler”) application Reindeer Join Pattern (Dancer), (Dasher),(Vixen),(Comet),(Cupid),(Doner),(Blitzen),(Rudolph) Transfer all the data if and only if all nine reindeer channels are ready
  • 22. New Rules Postpone Rendezvous (lazy acquire) Before: (rudolph, S, msg) -> [(Santa,JR) ] rudolph-receive After : [ (rudolph,join-send, msg) ]rudolph-send Steal Before: (Mrs Claus, R, Null) -> [(rudolph,JS,msg)send After : Mrs Claus.val = msg [(Santa,JR) ] rudolph-receive
  • 23. Words of Wisdom Hence plan to throw one away; you will, anyhow. --Fred Brooks (on pilot projects)
  • 24.
  • 25. Lessons Learnt • Asynchrony matters – Prototype not powerful enough to handle Dining Philosophers – Synchronous channels with buffers. • Atomicity a powerful feature. – In case of Dining Philosophers, just does the right thing • “Transactional” logic and expressiveness come to the forefront quickly.
  • 26. Status • Prototype is still held together by baling wire and chewing gum. • A lot of work needs to be done before it is prime time
  • 27. A New Language: Conversation with Scalable Join Pattern’s Authors Concurrent ML Atomic transactions Transactional events Eager and lazy acquire Composibility Lock-free data structures Optimistic locking protocols Inevitability
  • 28. The Ghosts of Software Present, Past, and Future The Present: Concurrent ML: guard(event, f) The Past: Chandler Notification Manager 2.0 (R.I.P): eval(“city == MTL and band == Interpol”) The Future: C.E.P & S.0.A with Stackless Python: Guard(function(chanop.val), concertFeedChannel) return eval(“city=MTL and band==Hannah Georgas”)
  • 29. References • The Santa Claus Problem: Thread Synchronization, http://www.youtube.com/watch?v=pqO6tKN2lc4 • Scalable Join Patterns, Claudo Russo & Aaron Turon, http://www.ccs.neu.edu/home/turon/scalable-joins.pdf • Jingle Bells, Solving the Santa Claus Problem in Polyphonic #C, http://research.microsoft.com/en-us/um/people/nick/polyphony/ • The Polyphonic #C Bedroom Poster, http://research.microsoft.com/en- us/um/people/nick/polyphony/polyphoniccsharpposter2002.ppt • http://swtch.com/usr/local/plan9/src/libthread/channel.c, Russ Cox • Concurrent Programming in ML. John H. Reppy. Cambridge University Press, Cambridge, England, 1999. • The Notification Manager, http://www.osafoundation.org/archives/2003_11.html • stackless.py (with select), http://stacklessexamples.googlecode.com/svn/trunk/sandbox/select/stackless.py • Prototyping Go’s Select with stackless.py for Stackless Python, http://andrewfr.files.wordpress.com/2010/07/july31revised.pdf