JAX 2018 Don’t Make it a Race: The Four Common Concurrency Control Patterns

By Jack Shirazi, Hotels.com

JAX direct link

3 levels of concurrency

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.

Software Transactional Memory

Queue to a single thread

Gör en enkeltrådad runnable.

Hantera som en vanlig add() på klientsidan.

Partitioning the data

Concurrenthashmap

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.

ForkJointPool.

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.

 

 

Annonser