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

Day 9 combining like terms
Day 9 combining like termsDay 9 combining like terms
Day 9 combining like terms
Erik Tjersland
 
Web design annual plan annual plan
Web design annual plan annual planWeb design annual plan annual plan
Web design annual plan annual plan
cal1968
 
From java to rails
From java to railsFrom java to rails
From java to rails
jokry
 
Geometry Section 3-2 1112
Geometry Section 3-2 1112Geometry Section 3-2 1112
Geometry Section 3-2 1112
Jimbo Lamb
 
Pre preliminary task
Pre preliminary taskPre preliminary task
Pre preliminary task
ceriseoliviaa
 
Rdf explained by Suess and me
Rdf explained by Suess and meRdf explained by Suess and me
Rdf explained by Suess and me
3 Round Stones
 
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
RIPE NCC
 
interpolation
interpolationinterpolation
interpolation
8laddu8
 
Analyzing Statistical Results
Analyzing Statistical ResultsAnalyzing Statistical Results
Analyzing Statistical Results
oehokie82
 
Magazine advert research
Magazine advert researchMagazine advert research
Magazine advert research
Elliot 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

Recently uploaded (20)

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
 
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
 
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...
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
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)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
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 New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
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
 
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
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 

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