By Jack Shirazi, Hotels.com

JAX ddirect 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

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

ConcurrentHashMap

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.

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.