SlideShare a Scribd company logo
1 of 23
Download to read offline
Concurrency on the JVM
  15 min introduktion til samtidighed

              Niels Bech Nielsen
              nbn@logical.dk
Om...
● 20+ års erfaring med objektorienteret
  systemudvikling
● Undervist på datamatiker- og
  datanomuddannelsen
● Tidligere Global Chief Engineer @ JP
  Morgan Rates i Glasgow
  ○ Intraday Risk Management
  ○ Trade capture
Behovet for samtidighed
● Bruger respons
   ○ Single-threaded UI
● Udnyttelse af multi-core arkitektur
   ○ Parallel arkitektur
● Resourceudnyttelse
   ○ Eksempelvis parallel I/O
Java samtidighed
● Frem til Java 5 meget primitiv håndtering
  ○ Manuel (og farlig) trådhåndtering
  ○ Objekt-Monitor synkronisering
  ○ Wait-Notify paradigme
● Java 5++
  ○ Executors, Callables, Futures
  ○ ReadWriteLocks
  ○ (Fork-Join)
Task scheduling
● Bedst udnyttelse baseret på
  ○ Antal processor/cores
    ■ Runtime.getRuntime().availableProcessors();
  ○ Blocking coefficiency
    ■ Graden af blokerende I/O operationer




     poolsize = number of cores / (1 - blocking coefficient)
Example
Pattern for Task Scheduling



 Net Asset Value (NAV) = summen af (aktie * gældende kurs)
Samtidighedsproblem
● Samtidighedsproblemer er
  ○ altid non-deterministisk
  ○ Som regel sporadisk
  ○ Svære at se i koden


● Optræder når
  ○ Mere end én tråd                  Fjern en betingelse og
  ○ Arbejder på fælles data           problemet er løst

  ○ Mindst en tråd skriver til data
Deling af tilstand
● Shared mutability
   ○ Alle tråde kan tilgå og skrive til data direkte
● Isolated mutability
   ○ Kun 1 tråd tilgår og skriver til data
● Immutability
   ○   Skrevne data kan ikke ændres
   ○   brugen af final
   ○   copy on write collections
   ○   Linked Lists, Tries
Shared mutability
● Shared mutability kan ikke undgåes
● Har få værktøjer i java
  ○   volatile
  ○   AtomicXXX
  ○   synchronized
  ○   Locks
Deling eksempel




              *
      Users
Software Transactional Memory
● Baseret på databaseteknologi
   ○   A)tomic
   ○   C)onsistent
   ○   I )solated
   ○   D)urable         Not necessary

● Skrivninger foregår i en transaktion
   ○ idempotent
   ○ Uden side-effekt
● Automatic retry on rollback
● Anvendt i visse funktionelle sprog
   ○ f.eks. clojure
Clojure
● Separation mellem reference og tilstand
  ○ Tilstand er immutable
  ○ Kun Identity Objects (ref) er skrivbare
● Referencer kan kun ændres i en transaktion

                               100



       Balance


                               200

                  Transacted
Simpel clojure eksempel

  (def balance (ref 0))

  (println "Balance is " @balance)

  (dosync
    (ref-set balance 100)
  )

  (println "Balance is now " @balance)
Write skew
● Clojure transaktioner sikrer mod samtidige
  skrivninger fra flere tråde
● Læsning er uden for transaktion
    ○ Seneste committede værdi
 (def checking-account (ref 500))
 (def savings-account (ref 600))

 (defn withdraw-account [from-balance constraining-balance amount]
   (dosync
      (let [total-balance (+ @from-balance @constraining-balance)]
       (if (>= (- total-balance amount) 1000)
         (alter from-balance - amount)
         (println "Sorry can't withdraw due to insufficient funds")
       )
     )
   )
 )

 (future (withdraw-account checking-account savings-account 100))
 (future (withdraw-account savings-account checking-account 100))
STM i Java
● Man kan anvende clojure direkte i java
  ○ import clojure.lang.Ref;
● STM også implementeret i andre libraries
  ○ e.g. Multiverse
STM Usage
● Atomare skrivninger med automatisk retry
  ○ Idempotent operations
  ○ Ingen side-effekter
● Simpel, garanteret datakonsistens
● Bedst til få skrivninger og mange læsninger
Actors paradigme
● Beskedbaseret kommunikation mellem
  objekter
● En Actor
   ○ har sin egen beskedkø
   ○ Udfører kald sekventielt
● Kald til actor
   ○ Som udgangspunkt asynkron
   ○ Blokerer ved synkrone kald
● Alle actors deler en threadpool
● Meget benyttet i Erlang og Scala
   ○ Scala har flere actor libraries
   ○ Kommende eksempler bruger akka (jboner)
Actor livscyklus

  Created


                              Active
            Started



                      Ready            Running


            Stopped
Scala Untyped Actor
class HollywoodActor extends Actor {
  def receive = {
    case role =>
     println "Playing " + role
  }
}

object HollywoodActor {
 def main(args: Array[String]) : Unit = {
  val johnnyDepp = Actor.actorOf[HollywoodActor].start()

        johnnyDepp ! "Jack Sparrow"
        johnnyDepp ! "Edward Scissorhands"
        johnnyDepp ! "Willy Wonka"

        Actors.registry.shutdownAll
    }
}
Scala Untyped Actor (synkron)
class FortuneTeller extends Actor {
  def receive = {
    case name : String =>
     self.reply_?(String.format("%s, your future is bright", name))
  }
}

object FortuneTeller {
 def main(args: Array[String]) : Unit = {
  val nostradamus = Actor.actorOf[FortuneTeller].start()

        nostradamus ! "Niels"
        val response = nostradamus !! "Martin"
        response match {
          case Some(responseMessage) => println(responseMessage)
          case None => println ("Never got a response before timeout")
        }
        Actors.registry.shutdownAll
    }
}
Typed Actor
Wrap objektinstans som actor
Alle metodekald bliver håndteret asynkront
I scala bruges scala traits som type
Giver et objekt med isolated mutability
Actors
● Bryder traditionel sekvensprogrammering
  ○ events etc
● Derfor velegnet til multi-core paradigme
Sammenfatning
Skaler dine opgaver til parallel udførsel
  poolsize = number of cores / (1 - blocking coefficient)

● Java har fået meget bedre værktøjer til
  samtidighedsprogrammering, men...
   ○ STM kan med fordel anvendes ved større read-
     intensive datamodeller
   ○ Actors bryder traditionel sekvensprogrammering og
     isolerer udførsel via (primært) asynkrone beskeder

More Related Content

Featured

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Samtidighed på jvm

  • 1. Concurrency on the JVM 15 min introduktion til samtidighed Niels Bech Nielsen nbn@logical.dk
  • 2. Om... ● 20+ års erfaring med objektorienteret systemudvikling ● Undervist på datamatiker- og datanomuddannelsen ● Tidligere Global Chief Engineer @ JP Morgan Rates i Glasgow ○ Intraday Risk Management ○ Trade capture
  • 3. Behovet for samtidighed ● Bruger respons ○ Single-threaded UI ● Udnyttelse af multi-core arkitektur ○ Parallel arkitektur ● Resourceudnyttelse ○ Eksempelvis parallel I/O
  • 4. Java samtidighed ● Frem til Java 5 meget primitiv håndtering ○ Manuel (og farlig) trådhåndtering ○ Objekt-Monitor synkronisering ○ Wait-Notify paradigme ● Java 5++ ○ Executors, Callables, Futures ○ ReadWriteLocks ○ (Fork-Join)
  • 5. Task scheduling ● Bedst udnyttelse baseret på ○ Antal processor/cores ■ Runtime.getRuntime().availableProcessors(); ○ Blocking coefficiency ■ Graden af blokerende I/O operationer poolsize = number of cores / (1 - blocking coefficient)
  • 6. Example Pattern for Task Scheduling Net Asset Value (NAV) = summen af (aktie * gældende kurs)
  • 7. Samtidighedsproblem ● Samtidighedsproblemer er ○ altid non-deterministisk ○ Som regel sporadisk ○ Svære at se i koden ● Optræder når ○ Mere end én tråd Fjern en betingelse og ○ Arbejder på fælles data problemet er løst ○ Mindst en tråd skriver til data
  • 8. Deling af tilstand ● Shared mutability ○ Alle tråde kan tilgå og skrive til data direkte ● Isolated mutability ○ Kun 1 tråd tilgår og skriver til data ● Immutability ○ Skrevne data kan ikke ændres ○ brugen af final ○ copy on write collections ○ Linked Lists, Tries
  • 9. Shared mutability ● Shared mutability kan ikke undgåes ● Har få værktøjer i java ○ volatile ○ AtomicXXX ○ synchronized ○ Locks
  • 10. Deling eksempel * Users
  • 11. Software Transactional Memory ● Baseret på databaseteknologi ○ A)tomic ○ C)onsistent ○ I )solated ○ D)urable Not necessary ● Skrivninger foregår i en transaktion ○ idempotent ○ Uden side-effekt ● Automatic retry on rollback ● Anvendt i visse funktionelle sprog ○ f.eks. clojure
  • 12. Clojure ● Separation mellem reference og tilstand ○ Tilstand er immutable ○ Kun Identity Objects (ref) er skrivbare ● Referencer kan kun ændres i en transaktion 100 Balance 200 Transacted
  • 13. Simpel clojure eksempel (def balance (ref 0)) (println "Balance is " @balance) (dosync (ref-set balance 100) ) (println "Balance is now " @balance)
  • 14. Write skew ● Clojure transaktioner sikrer mod samtidige skrivninger fra flere tråde ● Læsning er uden for transaktion ○ Seneste committede værdi (def checking-account (ref 500)) (def savings-account (ref 600)) (defn withdraw-account [from-balance constraining-balance amount] (dosync (let [total-balance (+ @from-balance @constraining-balance)] (if (>= (- total-balance amount) 1000) (alter from-balance - amount) (println "Sorry can't withdraw due to insufficient funds") ) ) ) ) (future (withdraw-account checking-account savings-account 100)) (future (withdraw-account savings-account checking-account 100))
  • 15. STM i Java ● Man kan anvende clojure direkte i java ○ import clojure.lang.Ref; ● STM også implementeret i andre libraries ○ e.g. Multiverse
  • 16. STM Usage ● Atomare skrivninger med automatisk retry ○ Idempotent operations ○ Ingen side-effekter ● Simpel, garanteret datakonsistens ● Bedst til få skrivninger og mange læsninger
  • 17. Actors paradigme ● Beskedbaseret kommunikation mellem objekter ● En Actor ○ har sin egen beskedkø ○ Udfører kald sekventielt ● Kald til actor ○ Som udgangspunkt asynkron ○ Blokerer ved synkrone kald ● Alle actors deler en threadpool ● Meget benyttet i Erlang og Scala ○ Scala har flere actor libraries ○ Kommende eksempler bruger akka (jboner)
  • 18. Actor livscyklus Created Active Started Ready Running Stopped
  • 19. Scala Untyped Actor class HollywoodActor extends Actor { def receive = { case role => println "Playing " + role } } object HollywoodActor { def main(args: Array[String]) : Unit = { val johnnyDepp = Actor.actorOf[HollywoodActor].start() johnnyDepp ! "Jack Sparrow" johnnyDepp ! "Edward Scissorhands" johnnyDepp ! "Willy Wonka" Actors.registry.shutdownAll } }
  • 20. Scala Untyped Actor (synkron) class FortuneTeller extends Actor { def receive = { case name : String => self.reply_?(String.format("%s, your future is bright", name)) } } object FortuneTeller { def main(args: Array[String]) : Unit = { val nostradamus = Actor.actorOf[FortuneTeller].start() nostradamus ! "Niels" val response = nostradamus !! "Martin" response match { case Some(responseMessage) => println(responseMessage) case None => println ("Never got a response before timeout") } Actors.registry.shutdownAll } }
  • 21. Typed Actor Wrap objektinstans som actor Alle metodekald bliver håndteret asynkront I scala bruges scala traits som type Giver et objekt med isolated mutability
  • 22. Actors ● Bryder traditionel sekvensprogrammering ○ events etc ● Derfor velegnet til multi-core paradigme
  • 23. Sammenfatning Skaler dine opgaver til parallel udførsel poolsize = number of cores / (1 - blocking coefficient) ● Java har fået meget bedre værktøjer til samtidighedsprogrammering, men... ○ STM kan med fordel anvendes ved større read- intensive datamodeller ○ Actors bryder traditionel sekvensprogrammering og isolerer udførsel via (primært) asynkrone beskeder