SlideShare a Scribd company logo
1 of 15
Download to read offline
Clojure’s
                            Software
                            Transactional
                            Memory



                                @fronx at @cljugb 12/2011

Thursday, December 15, 11
what’s it good for?




Thursday, December 15, 11
it’s pretty much useless

                                    unless you have:

                                    concurrency
                                    shared state
                                  changes to state



Thursday, December 15, 11
the pitch
                                    “It allows you to do
                                    coordinated change
                                    without the complexity
                                    of locking.”
                                    — Rich Hickey
                                    http://www.infoq.com/interviews/hickey-clojure




Thursday, December 15, 11
kind of like
                            database transactions.

                                but in memory.


Thursday, December 15, 11
example
              shared state      1   9       5   7       3   10       4
                                                                                     2   6   8


          changing state                                                     4

                                                                         4

                      threads           a
                                                    b            c               d
                                                                                     e



                                                                 solution: do it atomically!

Thursday, December 15, 11
user=> (def my-atom (atom 0))
                            #'user/my-atom
                                                                    atoms
                                                                    (No STM here.)
                            user=> @my-atom
                            0

                            user=> (swap! my-atom inc)
                            1

                            user=> @my-atom
                            1

                            user=> (swap! my-atom (fn [n] (* (+ n n) 2)))
                            4
Thursday, December 15, 11
broken example
                              (using atoms)




Thursday, December 15, 11
changing state

                            atomic   (acts as one point in time)

                            consistent    (from valid state to valid state)

                            isolated   (changes are local until committed)




Thursday, December 15, 11
sharing state
                            mutate in
                            STM only!
                                              coordinated   independent

                                synchronous      ref          atom

                               asynchronous       –          agent        receive message
                                                                             and return




Thursday, December 15, 11
STM functions
                               ref    reference to a collection
                             dosync   transaction
                            set-ref   set new value
                             alter    set new value via a function
                            commute   set new value and don’t block
                             ensure   block writes by others
                               io!    IllegalStateException


Thursday, December 15, 11
working and slightly
                              different example
                                            (using STM)




Thursday, December 15, 11
STM functions
                               ref    reference to a collection
                             dosync   transaction
                            set-ref   set new value
                             alter    set new value via a function
                            commute   set new value and don’t block
                             ensure   block writes by others
                               io!    IllegalStateException


Thursday, December 15, 11
what to think about
                            is it okay if others make changes in parallel?
                                  commute

                            multi-ref constraints?
                                  ensure




Thursday, December 15, 11
how does it work?
                            MVCC, snapshot isolation
                            persistent data structures
                            on-commit evaluation
                            http://java.ociweb.com/mark/stm/article.html




Thursday, December 15, 11

More Related Content

Similar to Introduction to Clojure's STM

AlphaBox Technology Overview
AlphaBox Technology OverviewAlphaBox Technology Overview
AlphaBox Technology Overviewmonica_singh
 
Day 9 combining like terms
Day 9 combining like termsDay 9 combining like terms
Day 9 combining like termsErik Tjersland
 
Web design annual plan annual plan
Web design annual plan annual planWeb design annual plan annual plan
Web design annual plan annual plancal1968
 
From java to rails
From java to railsFrom java to rails
From java to railsjokry
 
iOS Architecture and MVC
iOS Architecture and MVCiOS Architecture and MVC
iOS Architecture and MVCMarian Ignev
 
Geometry Section 3-2 1112
Geometry Section 3-2 1112Geometry Section 3-2 1112
Geometry Section 3-2 1112Jimbo Lamb
 
Pre preliminary task
Pre preliminary taskPre preliminary task
Pre preliminary taskceriseoliviaa
 
Implementing Metadata Standards for a Digital Audiovisual Preservation Reposi...
Implementing Metadata Standards for a Digital Audiovisual Preservation Reposi...Implementing Metadata Standards for a Digital Audiovisual Preservation Reposi...
Implementing Metadata Standards for a Digital Audiovisual Preservation Reposi...Kara Van Malssen
 
RIPE Atlas
RIPE AtlasRIPE Atlas
RIPE AtlasRIPE NCC
 
Rdf explained by Suess and me
Rdf explained by Suess and meRdf explained by Suess and me
Rdf explained by Suess and me3 Round Stones
 
ISA11 - Martin Verzilli: Interaction Design for Emergencies and Disasters
ISA11 - Martin Verzilli: Interaction Design for Emergencies and DisastersISA11 - Martin Verzilli: Interaction Design for Emergencies and Disasters
ISA11 - Martin Verzilli: Interaction Design for Emergencies and DisastersInteraction South America
 
IPv6 Adoption in the RIPE NCC Service Region
IPv6 Adoption in the RIPE NCC Service RegionIPv6 Adoption in the RIPE NCC Service Region
IPv6 Adoption in the RIPE NCC Service RegionRIPE NCC
 
Oracle Crystal Ball Screens
Oracle Crystal Ball ScreensOracle Crystal Ball Screens
Oracle Crystal Ball ScreensDave Maskell
 
interpolation
interpolationinterpolation
interpolation8laddu8
 
The Application Development Landscape - 2011
The Application Development Landscape -  2011The Application Development Landscape -  2011
The Application Development Landscape - 2011David Skok
 
Academic Library Collection Development: Current Landscape, Future Trends
Academic Library Collection Development: Current Landscape, Future TrendsAcademic Library Collection Development: Current Landscape, Future Trends
Academic Library Collection Development: Current Landscape, Future TrendsMichael Levine-Clark
 
Analyzing Statistical Results
Analyzing Statistical ResultsAnalyzing Statistical Results
Analyzing Statistical Resultsoehokie82
 
Magazine advert research
Magazine advert researchMagazine advert research
Magazine advert researchElliot Fursdon
 

Similar to Introduction to Clojure's STM (20)

AlphaBox Technology Overview
AlphaBox Technology OverviewAlphaBox Technology Overview
AlphaBox Technology Overview
 
Day 9 combining like terms
Day 9 combining like termsDay 9 combining like terms
Day 9 combining like terms
 
Web design annual plan annual plan
Web design annual plan annual planWeb design annual plan annual plan
Web design annual plan annual plan
 
From java to rails
From java to railsFrom java to rails
From java to rails
 
iOS Architecture and MVC
iOS Architecture and MVCiOS Architecture and MVC
iOS Architecture and MVC
 
Compost Modern, 2009
Compost Modern, 2009Compost Modern, 2009
Compost Modern, 2009
 
Geometry Section 3-2 1112
Geometry Section 3-2 1112Geometry Section 3-2 1112
Geometry Section 3-2 1112
 
Pre preliminary task
Pre preliminary taskPre preliminary task
Pre preliminary task
 
Do your test
Do your testDo your test
Do your test
 
Implementing Metadata Standards for a Digital Audiovisual Preservation Reposi...
Implementing Metadata Standards for a Digital Audiovisual Preservation Reposi...Implementing Metadata Standards for a Digital Audiovisual Preservation Reposi...
Implementing Metadata Standards for a Digital Audiovisual Preservation Reposi...
 
RIPE Atlas
RIPE AtlasRIPE Atlas
RIPE Atlas
 
Rdf explained by Suess and me
Rdf explained by Suess and meRdf explained by Suess and me
Rdf explained by Suess and me
 
ISA11 - Martin Verzilli: Interaction Design for Emergencies and Disasters
ISA11 - Martin Verzilli: Interaction Design for Emergencies and DisastersISA11 - Martin Verzilli: Interaction Design for Emergencies and Disasters
ISA11 - Martin Verzilli: Interaction Design for Emergencies and Disasters
 
IPv6 Adoption in the RIPE NCC Service Region
IPv6 Adoption in the RIPE NCC Service RegionIPv6 Adoption in the RIPE NCC Service Region
IPv6 Adoption in the RIPE NCC Service Region
 
Oracle Crystal Ball Screens
Oracle Crystal Ball ScreensOracle Crystal Ball Screens
Oracle Crystal Ball Screens
 
interpolation
interpolationinterpolation
interpolation
 
The Application Development Landscape - 2011
The Application Development Landscape -  2011The Application Development Landscape -  2011
The Application Development Landscape - 2011
 
Academic Library Collection Development: Current Landscape, Future Trends
Academic Library Collection Development: Current Landscape, Future TrendsAcademic Library Collection Development: Current Landscape, Future Trends
Academic Library Collection Development: Current Landscape, Future Trends
 
Analyzing Statistical Results
Analyzing Statistical ResultsAnalyzing Statistical Results
Analyzing Statistical Results
 
Magazine advert research
Magazine advert researchMagazine advert research
Magazine advert research
 

Recently uploaded

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...DianaGray10
 
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 2024The Digital Insurer
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
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...apidays
 
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 businesspanagenda
 
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)wesley chun
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
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...Neo4j
 
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 2024The Digital Insurer
 
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 FMESafe Software
 
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 FresherRemote DBA Services
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 

Recently uploaded (20)

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
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
+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...
 
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...
 
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
 
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)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
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...
 
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
 
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
 
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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 

Introduction to Clojure's STM

  • 1. Clojure’s Software Transactional Memory @fronx at @cljugb 12/2011 Thursday, December 15, 11
  • 2. what’s it good for? Thursday, December 15, 11
  • 3. it’s pretty much useless unless you have: concurrency shared state changes to state Thursday, December 15, 11
  • 4. the pitch “It allows you to do coordinated change without the complexity of locking.” — Rich Hickey http://www.infoq.com/interviews/hickey-clojure Thursday, December 15, 11
  • 5. kind of like database transactions. but in memory. Thursday, December 15, 11
  • 6. example shared state 1 9 5 7 3 10 4 2 6 8 changing state 4 4 threads a b c d e solution: do it atomically! Thursday, December 15, 11
  • 7. user=> (def my-atom (atom 0)) #'user/my-atom atoms (No STM here.) user=> @my-atom 0 user=> (swap! my-atom inc) 1 user=> @my-atom 1 user=> (swap! my-atom (fn [n] (* (+ n n) 2))) 4 Thursday, December 15, 11
  • 8. broken example (using atoms) Thursday, December 15, 11
  • 9. changing state atomic (acts as one point in time) consistent (from valid state to valid state) isolated (changes are local until committed) Thursday, December 15, 11
  • 10. sharing state mutate in STM only! coordinated independent synchronous ref atom asynchronous – agent receive message and return Thursday, December 15, 11
  • 11. STM functions ref reference to a collection dosync transaction set-ref set new value alter set new value via a function commute set new value and don’t block ensure block writes by others io! IllegalStateException Thursday, December 15, 11
  • 12. working and slightly different example (using STM) Thursday, December 15, 11
  • 13. STM functions ref reference to a collection dosync transaction set-ref set new value alter set new value via a function commute set new value and don’t block ensure block writes by others io! IllegalStateException Thursday, December 15, 11
  • 14. what to think about is it okay if others make changes in parallel? commute multi-ref constraints? ensure Thursday, December 15, 11
  • 15. how does it work? MVCC, snapshot isolation persistent data structures on-commit evaluation http://java.ociweb.com/mark/stm/article.html Thursday, December 15, 11