1 / 14

Software Transactional Memory

Software Transactional Memory. Steve Severance – Alpha Heavy Industries. Motivation. Innovations in concurrency has not kept pace Still using locks Immutability has helped in Haskell. STM Basics. Transactional Concurrency Atomicity – Results are visible all at once

jolie
Télécharger la présentation

Software Transactional Memory

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Software Transactional Memory Steve Severance – Alpha Heavy Industries

  2. Motivation • Innovations in concurrency has not kept pace • Still using locks • Immutability has helped in Haskell

  3. STM Basics • Transactional Concurrency • Atomicity – Results are visible all at once • Isolation – Action unaffected by other threads • Everything you need is in the stm-2.4.2 package

  4. Haskell and STM • Exploits Three Haskell Features: • Purity (Transactions must be pure) • Monads • Immutability (Values are never modified) • Utilizes the Type System • Anything involved in the transaction is marked (TVar, TChan, STM, etc…)

  5. Basic Transaction Pattern • atomically $ do … • atomically evaluates the transaction main :: IO () main = do var <- newTVarIO False atomically $ do val <- readTVarvar if val == False then writeTVarvar True else return ()

  6. Primitives • TVar (Always has a Value) • TMVar(Analogous to Regular MVar) • TChan (Multicast Capabilities) • TQueue (FIFO Queue) • TBQueue (Bounded Queue) • TSem (Semaphore)

  7. Retrying • Use the retry function to retry the transaction • The transaction will only be run when one of the inputs has changed withdrawFunds :: TVar Account -> Money -> STM Money withdrawFundsaccountVar amount = do account <- readTVaraccountVar if (aBalance account) > amount then writeTVaraccountVar account{aBalance = (aBalance account) `subtract` amount} >> return amount else retry

  8. Choices • orElse runs a second option if the first retrys withdrawEvil :: TVar Account -> TChan Account -> Money -> STM Money withdrawEvilaccountVarnsfChan amount = do withdrawFundsaccountVar amount `orElse` withdrawNonSufficientFundsaccountVarnsfChan amount

  9. Using Alternative • You always wanted to use those cool operators • Use <|> instead of orElse

  10. Dealing with Exceptions • Revisiting the Atomic Guarantee • No need for rollback unlike MVar and Chan • STM can throw and catch

  11. Bounded Queues • TBQueue limits its size • Writers will block until space becomes available • Useful for performance and memory management

  12. Being Strict • Use NFData (deepseq) • We internally use special write functions to keep work from leaking across thread boundaries • Transaction Time writeTVar’ :: NFData a => TVar a -> a -> STM () {-# INLINE writeTVar' #-} writeTVar' varval = rnfval `seq` writeTVarvarval

  13. Other Languages • Clojure • Scala • C++ • C#/.Net

  14. References • Composable Memory Transactions • Beautiful Concurrency • STM Retrospective for .Net • Gists: • Sample 1

More Related