INF1010 Tråder II 6. april 2016

Like dokumenter
IN1010 våren Repetisjon av tråder. 15. mai 2018

Tråder del 2 Våren Stein Gjessing Institutt for informatikk Universitetet i Oslo

Start opp. Prosess 3 Meldingsutveksling Operativsystemet (styrer alt og sørger for kommunikasjon mellom prosesser)

Invarianter, +lstander og li1 mer seman+kk

Tråder del 2 Våren 2012

INF1010 Tråder mars 2016

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

Tråder Repetisjon. 9. og 13. mai Tråder

Tråder Repetisjon. 9. og 13. mai Tråder

IN Våren 2019 Tråder del mars 2019

INF Våren 2017 Tråder del 1

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

UNIVERSITETET I OSLO

INF1010 Repetisjonskurs i tråder

INF1010 oversikt med

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

Sortering med tråder - Quicksort

Operativsystemer, prosesser og tråder

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd

UNIVERSITETET I OSLO

Arne Maus OMS, Inst. for informatikk

Synkronisering II. Kapittel 7. Betingelse oppfylt (0) liste. tråd-deskriptor. venteliste. tråd-deskriptor. tråd-deskriptor.

INF1010 oversikt med

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

INF2440 Eksamen 2016 løsningsforslag. Arne Maus, PSE ifi, UiO

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

UNIVERSITETET I OSLO

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

INF1010 våren januar. Objektorientering i Java

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF2440 Uke 4, våren2014 Avsluttende om matrisemultiplikasjon og The Java Memory Model + bedre forklaring Radix. Arne Maus OMS, Inst.

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Løsnings forslag i java In115, Våren 1996

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

INF våren 2017

Synkronisering I. Kapittel 6. Tråd A. ferdig. t.varsle() u.vente() Tråd B. ferdig. tid

Prøveeksamen INF2440 v Arne Maus PSE, Inst. for informatikk

INF2440 Uke 4, v2017 Om å samle parallelle svar, matrisemultiplikasjon og The Java Memory Model + evt bedre forklaring Radix

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Velkommen til. INF våren 2016

INF2440 Uke 7, våren2015. Arne Maus PSE, Inst. for informatikk

IN våren 2019 Onsdag 16. januar

IN våren 2018 Tirsdag 16. januar

IN1010 våren januar. Objektorientering i Java

INF våren 2015

INF2440 Uke 4, v2015 Om å samle parallelle svar, matrisemultiplikasjon og The Java Memory Model + evt bedre forklaring Radix

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

IN1010''1 Våren 2018 Tråder del'1. 3.'april 2018''

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

INF Seminaroppgaver til uke 3

Side 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006

UNIVERSITETET I OSLO

Avdeling for ingeniørutdanning Institutt for teknologi

Kort notat om parallellstyring IN147

INF1010 Binære søketrær ++

Seminaroppgaver IN1010, uke 2

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

Løse reelle problemer

TOD063 Datastrukturer og algoritmer

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Leksjon 7. Filer og unntak

UNIVERSITETET I OSLO

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi

INF1000: Forelesning 7

Kap 19. Mer om parallelle programmer i Java og Kvikksort

INF1010 oversikt med. 19. mai Subklasser mm Unntaksbehandling GUI Tråder. Stein Gjessing InsBtuC for informabkk Universitetet i Oslo

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

2 Om statiske variable/konstanter og statiske metoder.

Innhold. Introduksjon til parallelle datamaskiner. Ulike typer parallelle arkitekturer. Prinsipper for synkronisering av felles hukommelse

INF2440 Uke 5, våren2016. Arne Maus PSE, Inst. for informatikk

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

UNIVERSITETET I OSLO

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

INF1000: Forelesning 7. Konstruktører Static

GUI («Graphical User Interface») del 2

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Løsningsforslag

(MVC - Model, View, Control)

UNIVERSITETET I OSLO

INF1010 siste begreper før oblig 2

Transkript:

INF1010 Tråder II 6. april 2016 Stein Gjessing Universitetet i Oslo 1

Tråder i Java tråden minrunp class MinRun implements Runable { <datastruktur> MinRun(... ) {... } public void run( ) {...... } } //end class MinRun start Thread- objekt (en tråd) run <data> En tråd lages og startes opp slik: Runnable minrunp = new MinRun(... ); Thread tråden = new Thread(minRunP); tråden.start( );......... tråden.join(); venter på at tråden terminerer (må beskyttes av try- catch) MinRun- objekt 2

Kommunikasjon mellom tråder: Felles data Felles data (blå felt, F) må vanligvis bare aksesseres (lese eller skrives i) av en tråd om gangen. Hvis ikke blir det kluss i dataene. Et felles objekt kalles en monitor. Metodene i en monitor må være kritiske regioner f.eks. K F F K Produsenter putinn hentut Buffer Konsumenter K: konstante data (immutable) Monitor er ikke noe ord i Java 3

Eksempel på parallellisering: Finn minste tall i tabell (samme teknikk for å finne sum / gjennomsnitt) Hovedprogrammet starter N tråder og venter på at de alle er ferdige før det henter minste verdi fra monitoren MinstMonitor Tråd 1 finner minste tall i denne delen av tabellen Tråd 2 finner minste tall i denne delen av tabellen void giminsteverdi( int verdi) int hentminst Trådenes minste verdi gis til monitoren Objekt av klassen MinstMonitor Tråd n (64?) finner minste tall i denne delen av tabellen BARE FANTASIEN SETTER GRENSER 4

Objekt av klassen MinstMonitorC minsttilna <LÅS MONITOREN> If (verdi < minsttilna) minsttilna = verdi; If (<alle tråden har gitt sine svar>) <SIGNAL>; <LÅS OPP> void giminsteverdi( int verdi) Kalles av lete- trådene void vent() <LÅS MONITOREN> while(<ikke alle trådene er ferdig>) <AWAIT>; <LÅS OPP> Kalles av main int hentminste() return minsttilna vent og hentminste kunne vært slått sammen

Amdahls lov En beregning delt opp i parallell går fortere jo mer uavhengig delene er Amdahls lov: Totaltiden er tiden i parallell + tiden det tar å kommunisere / synkronisere/ gjøre felles oppgaver Tiden det tar å synkronisere er ikke parallelliserbar (hjelper ikke med flere prosessorer) Men du kan være smart og lage synkroniseringen så kort eller mellom så få tråder som mulig total tid Start opp Synkroniser Lag resultat Parallelle beregninger Parallelle beregninger 6

Amdahls lov og finn minste tall Totaltid: Tiden det tar å lage og sette i gang 64 tråder (kan det gjøres i parallell?) (log 64 = 6) Tiden det tar å finne et minste tall i min del av tabellen Til slutt i monitoren: En og en tråd må teste sitt resultat (Kan det gjøres i parallell?) 2 * Tegn opp. total tid Start opp n tråder Parallelle beregninger Synkronisering Lag endelig resultat * 6 Start med én tråd, vha. doblinger 6 ganger har vi 64 tråder, dvs, 2 = 64, og log 64 = 6 2 2, 4, 8, 16, 32, 64 7

Barrierer i parallellprogrammering Barriere, dvs. vent på at alle er ferdig Denne tråden kan fortsetter når alle har nådd barrieren Gren opp i parallelle Beregninger Alle trådene sier fra når de er ferdige tid 8

Barrierer i Java import java.util.concurrent.*; Barrieren CountDownLatch minbariere = new CountDownLatch(6) minbarriere.await(); minbarriere.countdown(); tid 9

Barrieren i dette eksemplet Start opp Gren opp i parallelle beregninger Alle trådene sier fra når de er ferdige (har nådd barrieren) Barieren Denne tråden kan fortsetter når alle har nådd barrieren. Da er det endelige resultatet klart. Alle trådene avsluttes med å kalle metoden giminsteverdi i monitoren Kallet monitor.vent(); i MinstC-programmet er en hjemmelaget barriere 10 tid

Objekt av klassen FinnMinstMonitorCB minsttilna void giminsteverdi( int verdi) <LÅS MONITOREN> If (verdi < minsttilna) minsttilna = verdi; <LÅS OPP> int hentminste() return minsttilna Kalles av tråd etter at alle de andre er ferdig Refaktorering gir en mye enklere monitor fordi nå skjer signaleringen og ventingen ved hjelp av en barriere i trådene. 11

Maskinarkitektur, f.eks. 4 kjerner (repetisjon) prosessor registre cache 1 cache 2 prosessor registre cache 1 Minne (RAM) prosessor registre cache 1 cache 2 prosessor registre cache 1 12

Volatile variable En variabel som er deklarert volatile caches ikke (og oppbevares ikke i registre (lenger enn helt nødvending)). En volatil variable skrives helt tilbake i primærlageret. boolean stopp = false; En tråd: stopp = true; En annen tråd: while(! stopp) { } Må da deklarere: volatile boolean stopp=false; 13

Synkronisering og felles variable i en monitor This means that any memory operations which were visible to a thread before exiting a synchronized block are visible to any thread after it enters a synchronized block protected by the same monitor, since all the memory operations happen before the release, and the release happens before the acquire. From: JSR 133 (Java Memory Model) FAQ Jeremy Manson and Brian Goetz, February 2004 Litt på siden av pensum i INF1010. Mest ment som en forsmak for de som er mer interessert. 14

Fordelen med konstanter (immutable objects) Konstanter kan det aldri skrives til Minnemodellen for konstanter blir derfor veldig enkel. Prøv å ha mest mulig konstanter når data skal deles mellom tråder. Eksempel: Geografiske data, observasjoner Hvis du ønsker å gjøre en forandring: Kast det gamle objektet og lag et nytt. 15

To typer invarianter (invariante tilstandspåstander): Når du lager en løkke er det alltid en invariant som sier hvor langt arbeidet i løkka er kommet Data i et objekt er alltid styrt av en (eller flere) invarianter eller konsistensregler Nå skal vi se på den siste typen invarianter (mer om den første typen invarianter senere i INF1010) 16

Invarianter på data i objekter Invariant: Alle dataene vi lagrer ligger i tabell[0] til og med tabell [antall 1] og 0 <= antall <= 1000 Uten tråder 0 settinn(x) { if (antall == 1000) return ;; antall ++;; tabell[antall-1] = x;; } antall Overbevis deg (og andre) om at metodene bevarer Invarianten!!!!!!!!! (og at den er sann ved oppstart)!!!!!! taut ( ) { if (antall == 0) return null;; antall --;; return (tabell[antall]);; } 999 17

Vi tar opp tråden (J ) fra sidene foran og fra forrige gang: Hvordan bevare invarianter på data i objekter når vi ikke har ansvaret alene. Svar: Vi venter ofte på at andre skal gjøre objektets (monitorens) tilsand hyggeligere. venter på å komme inn første gang <lås> if (antall == 1000) vent- til: Ikke- Full(); antall++; : signal: Ikke- Tom(); <lås opp> <lås> If (antall == 0) vent- til: Ikke- Tom(); antall - - ; : signal: Ikke- Full(); <lås opp> void setinn(int verdi) En monitor (et objekt) int taut() Invariant: Alle dataene vi lagrer ligger i tabell[0] til og med tabell [antall 1] og 0 <= antall <= 1000 18

Lock laas = new ReentrantLock(); Condition ikkefull = laas.newcondition(); Condition ikketom = laas.newcondition(); void settinn ( int verdi) throws InterrupedException laas.lock(); try { while (full) ikkefull.await(); // OK med if? // nå er det helst sikkert ikke fult : // det er lagt inn noe, så det er helt sikkert ikke tomt: ikketom.signal(); } finally { laas.unlock(); } int taut ( ) throws InterrupedException laas.lock(); try { while (tom) ikketom.await(); // OK med if? // nå er det helst sikkert ikke tomt; : // det er det tatt ut noe, så det er helt sikkert ikke fult: ikkefull.signal(); } finally { laas.unlock(); } En kø for selve låsen og en kø for hver condition- variabel 19

Nytt tema (men fortsatt tråder) Vranglås Engelsk: Deadlock Horstmann kap. 20.5 20 20

Mer om tråder: Vranglås (deadlock) Vranglås skjer når flere tråder venter på hverandre i en sykel: Eksempel Veikryss: alle bilene skal stoppe for biler fra høyre - > Alle stopper = VRANGLÅS 21 21

Vranglås betyr Flere tråder venter på hverandre Syklisk venting Venter på Venter på Venter på Venter på 22 22

Hvordan kan dette skje? 23 23

Vranglås kan oppstå når flere tråder kjemper om felles ressurser En eller flere felles ressurser ønskes av mer enn en tråd Hvis en tråd først tar en ressurs og deretter en annen... 24 24

1. Ta bare en ressurs 2. Ta alle eller ingen Unngå vranglås 3. Alle tråder tar alleressurser i samme rekkefølge Hvis vranglås har oppstått: Fri en og en ressurs til det ikke lenger er vranglås 25 25

Enkleste eksempel på vranglås To tråder To ressurser som tas i forskjellig rekkefølge Ressurs 1 Tråd 1 Tråd 2 Ta 1 Ta 2 Ta 2 Ta 1 Fri 1 og 2 Fri 1 og 2 Ressurs 2 26 26

2 Enkleste eksempel på vranglås: 1 To biler kan risikere å vente på hverandre 1 2 Venstre del Høyre del Smalt veistykke, to biler kan ikke passere hverandre. Bilene kan bare se den første delen. 27

Vranglås! Venstre del Høyre del Det smale veistykket består av to ressurser, og begge bilene venter på at den andre bilen skal bli ferdig med å bruke sin ressurs. 28

Eksempel Program 1 En monitor for både venstre og høyre del For (i=0 ; i < 10; i++) { kjør bil fra venstre til høyre } Venstre del Smalt veistykke Høyre del For (i=0 ; i < 10; i++) { kjør bil fra høyre til venstre } 29 29

Eksempel Program 2 (refaktorert) To monitorer, en for venstre og en høyre Venstre del Høyre del Smalt veistykke 30