JAX 2018 Don’t Make it a Race: The Four Common Concurrency Control Patterns
By Jack Shirazi, Hotels.com
3 levels of concurrency
- High level
- Seven concurrency models in seven weeks
- Models (how you will wirte your prorgam)
- Threds & locks
- Etc
- Medium concurrency patterns
- …
- Low blocks
- @runnable
- Thread
- etc
Vilka strategiska val är viktiga innan du börjar jobba?
Shared Mutable State
- Användas av flera trådar
- Kan ändras
- Stateful
State
Kan försöka utlokalisera ditt state
Mutable
Svårt att bygga.
…Men eventually-immutable går ibland att uppnå.
Final private fields.
Nackdelar ganska mycket kopierande.
Shared
Thread local state
Ta bort ett av orden, så har du inte längre ett problem med concurrency.
Shared immutble state:
- functional programming,
- mapreduce
Unshared mutable state
- actors,
- single threaded event,
- etc.
Pessimistic locking
Javas synchonized
Lätt att implementera – yay
Enkeltrådat.
Optmistic transaction
Map ==> concurrentMap
Måste trolla lite med uppdatering av objekt.
Queue to a single thread
Gör en enkeltrådad runnable.
Hantera som en vanlig add() på klientsidan.
Partitioning the data
Dela upp datat så att respektive kan agera enkeltrådat.
Putting it all together
Går bra att blanda de olika mönstren för att lösa ditt problem.
I praktiken
- Försöka identifiera dina möjliga problemområden (concurrency) så tidigt som möjligt, helst redan på den arkitekturella nivån.
- Försök eliminera Shared|Mutable|State
- Går det att använda en högnivåmodell för concurrency?
- Förstå ditt behov av concurrency,
- kavla upp ärmarna, och gör det själv.
- Kapsla in ditt problem så gott du kan.
- Använd persistent [1]?
- Använda existerande datastrukturer när det går.