By Jack Shirazi, Hotels.com
3 levels of concurrency
- High level
- Seven concurrency models in seven weeks
- Models (how you will wirte your program)
- Threads & 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
TThread local state
Ta bort ett av orden, så har du inte längre ett problem med concurrency.
Shared immutable state:
- functional programming,
- mapreduce
Unshared mutable state
- actors,
- single threaded event,
- etc
Pessimistic locking
Javas synchronized
Lätt att implementera - yay
Enkelltrådat.
Optimistic transaction
Map ==> concurrentMap
Måste trolla lite med uppdatering av objekt. [Software Transactional Memory] (https://en.wikipedia.org/wiki/Software_transactional_memory)
Queue to a single thread
Gör en enkeltrådad runnable.
Hantera en vanlig add() på klientsidan.
Partitioning the data
Delat 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.