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

Like dokumenter
INF1010 Tråder II 6. april 2016

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

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

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

INF Notater. Veronika Heimsbakk 10. juni 2012

INF1010 Repetisjonskurs i tråder

UNIVERSITETET I OSLO

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

Operativsystemer, prosesser og tråder

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

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Sortering med tråder - Quicksort

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

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

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

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

GUI («Graphical User Interface») del 2

INF1000 Metoder. Marit Nybakken 16. februar 2004

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

GUI («Graphical User Interface») del 2

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

2 Om statiske variable/konstanter og statiske metoder.

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

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

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

INF1010 Binære søketrær ++

UNIVERSITETET I OSLO

Inf1010 oppgavesamling

INF Våren 2017 Tråder del 1

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

UNIVERSITETET I OSLO

INF1000: Forelesning 7

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

INF2440, Uke 3, våren2015 Regler for parallelle programmer, mer om cache og Radix-algoritmen. Arne Maus OMS, Inst. for informatikk

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

Avdeling for ingeniørutdanning Institutt for teknologi

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

INF1000: Forelesning 4. Mer om arrayer Metoder

UNIVERSITETET I OSLO

Kapittel 8: Programutvikling

Kap 19. Mer om parallelle programmer i Java og Kvikksort

INF våren 2017

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000: Forelesning 7. Konstruktører Static

INF1010 Arv. Marit Nybakken 2. februar 2004

Concurrency. Lars Vidar Magnusson. September 20, Lars Vidar Magnusson () Forelesning i Operativsystemer September 20, / 17

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

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

Argumenter fra kommandolinjen

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Seminaroppgaver IN1010, uke 2

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

Programmering i C++ Løsningsforslag Eksamen høsten 2005

static int ant_steiner; //antall steiner static int teller2 = 0; //teller for printing til Thread^ murer; //murertråden

UNIVERSITETET I OSLO

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

Programmeringsspråket C Del 3

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

Program delegate. Lage et nytt prosjekt i Visual Studio

UNIVERSITETET I OSLO

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

INF2440 Effektiv parallellprogrammering Uke 1, våren Arne Maus PSE, Inst. for informatikk

Transkript:

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

Hva er tråder? 2

Hva er tråder? I utgangspunktet uavhengige aktiviteter som konkurrerer om å få bruke prosessoren. 2

Hvorfor tråder? 3

Hvorfor tråder? Flere oppgaver må kunne gjøres samtidig. 3

Hvorfor tråder? Flere oppgaver må kunne gjøres samtidig. Kokker og servitører har forskjellige roller, men jobber samtidig Simulere kjøp av flybilletter fra forskjellige kunder samtidig 3

Hvorfor tråder? Flere oppgaver må kunne gjøres samtidig. Kokker og servitører har forskjellige roller, men jobber samtidig Simulere kjøp av flybilletter fra forskjellige kunder samtidig Vi vil utnytte prosessoren(e) for å gjøre noe raskere. 3

Hvorfor tråder? Flere oppgaver må kunne gjøres samtidig. Kokker og servitører har forskjellige roller, men jobber samtidig Simulere kjøp av flybilletter fra forskjellige kunder samtidig Vi vil utnytte prosessoren(e) for å gjøre noe raskere. Finne et spesifikt element (f.eks største/minste) Sortere data INF2440 Enkode videofiler INF5063 3

Hvordan bruke tråder? Alternativ 1: Lag en subklasse av Thread Alternativ 2: Implementer Runnable 4

Subklasse av Thread class TraadklasseNavn extends Thread 5

Subklasse av Thread class TraadklasseNavn extends Thread Kan enkelt starte TraadklasseNavn med: TraadklasseNavn traaden = new TraadklasseNavn(); traaden.start(); 5

Subklasse av Thread class TraadklasseNavn extends Thread Kan enkelt starte TraadklasseNavn med: TraadklasseNavn traaden = new TraadklasseNavn(); traaden.start(); Men arver også alle variabler og metoder fra klassen Thread. Disse ønsker vi ikke å risikere og kødde med. 5

Implementer grensesnittet Runnable class TraadklasseNavn implements Runnable 6

Implementer grensesnittet Runnable class TraadklasseNavn implements Runnable Må implementere metoden public void run(){} for å kompilere men det er jo uansett metoden som blir kalt ved start av tråd. 6

Implementer grensesnittet Runnable class TraadklasseNavn implements Runnable Må implementere metoden public void run(){} for å kompilere men det er jo uansett metoden som blir kalt ved start av tråd. Krever litt ekstra ved start av tråder: Thread traaden = new Thread( new TraadklasseNavn()); traaden.start(); Må altså opprette et nytt Thread objekt som tar vår klasse som parameter til konstruktøren. 6

Starte en tråd traaden.start(); 7

Starte en tråd traaden.start(); 1 class TraadklasseNavn implements Runnable { 2 public void run() { 3 System.out.println("Hei fra traad: " + this); 4 } 5 } 7

Starte en tråd traaden.start(); 1 class TraadklasseNavn implements Runnable { 2 public void run() { 3 System.out.println("Hei fra traad: " + this); 4 } 5 } Hei fra traad: TraadklasseNavn@b8bb110 7

Starte en tråd traaden.start(); 1 class TraadklasseNavn implements Runnable { 2 public void run() { 3 System.out.println("Hei fra traad: " + this); 4 } 5 } Hei fra traad: TraadklasseNavn@b8bb110 IKKE traaden.run(); 7

Starte en tråd traaden.start(); 1 class TraadklasseNavn implements Runnable { 2 public void run() { 3 System.out.println("Hei fra traad: " + this); 4 } 5 } Hei fra traad: TraadklasseNavn@b8bb110 IKKE traaden.run(); sekvensiell kjøring 7

Kommunikasjon mellom tråder 8

Kommunikasjon mellom tråder Ingen garanti for rekkefølge på trådene. Caching og oppdatering av felles data Låser og barrierer Monitor 8

Rekkefølge på tråder Operativsystemet bestemmer hvilken tråd som startes når 9

Rekkefølge på tråder Operativsystemet bestemmer hvilken tråd som startes når Kan ikke anta at første tråd.start() et vil bli startet først 9

Rekkefølge på tråder Operativsystemet bestemmer hvilken tråd som startes når Kan ikke anta at første tråd.start() et vil bli startet først Kan heller ikke garantere at en tråd gjør seg ferdig før en annen tråd får vinduet 9

Rekkefølge på tråder Operativsystemet bestemmer hvilken tråd som startes når Kan ikke anta at første tråd.start() et vil bli startet først Kan heller ikke garantere at en tråd gjør seg ferdig før en annen tråd får vinduet 9

Tre avgjørende prinsipper for lesing og skriving på felles data (variabler) Før (og etter) synkronisering på felles synkroniserings-objekt gjelder (fra INF2440): 10

Tre avgjørende prinsipper for lesing og skriving på felles data (variabler) Før (og etter) synkronisering på felles synkroniserings-objekt gjelder (fra INF2440): 1. Hvis ingen tråder skriver på en felles variabel, kan alle tråder lese denne. 10

Tre avgjørende prinsipper for lesing og skriving på felles data (variabler) Før (og etter) synkronisering på felles synkroniserings-objekt gjelder (fra INF2440): 1. Hvis ingen tråder skriver på en felles variabel, kan alle tråder lese denne. 2. To tråder må aldri skrive samtidig på en felles variabel (eks. i++ går galt) 10

Tre avgjørende prinsipper for lesing og skriving på felles data (variabler) Før (og etter) synkronisering på felles synkroniserings-objekt gjelder (fra INF2440): 1. Hvis ingen tråder skriver på en felles variabel, kan alle tråder lese denne. 2. To tråder må aldri skrive samtidig på en felles variabel (eks. i++ går galt) 3. Hvis bare én tråd skriver på en variabel må også bare denne tråden lese denne variabelen før synkronisering ingen andre tråder må lese den før synkroniserin (Bankteller eksempelet) 10

Caching, volatile, immutable 11

Caching, volatile, immutable Cache Et mellomlager i prosessoren, for å slippe å dra til minnet hver gang. 11

Caching, volatile, immutable Cache Et mellomlager i prosessoren, for å slippe å dra til minnet hver gang. 12

Caching, volatile, immutable Cache Et mellomlager i prosessoren, for å slippe å dra til minnet hver gang. Volatile En variabel som er deklarert volatile caches ikke (og oppbevares ikke i registre (lenger enn helt nødvending)).en volatile variable skrives helt tilbake i primærlageret før neste instruksjon utføres. fra forelesning om Tråder I 13

Caching, volatile, immutable Cache Et mellomlager i prosessoren, for å slippe å dra til minnet hver gang. Volatile En variabel som er deklarert volatile caches ikke (og oppbevares ikke i registre (lenger enn helt nødvending)).en volatile variable skrives helt tilbake i primærlageret før neste instruksjon utføres. fra forelesning om Tråder I Immutable Et fancy ord for final, eller konstant en variabel som aldri endrer verdi. 13

Caching, volatile, immutable Cache Et mellomlager i prosessoren, for å slippe å dra til minnet hver gang. Volatile En variabel som er deklarert volatile caches ikke (og oppbevares ikke i registre (lenger enn helt nødvending)).en volatile variable skrives helt tilbake i primærlageret før neste instruksjon utføres. fra forelesning om Tråder I Immutable Et fancy ord for final, eller konstant en variabel som aldri endrer verdi. private final char TOM_VERDI_TEGN =. ; 13

Caching, volatile, immutable Cache Et mellomlager i prosessoren, for å slippe å dra til minnet hver gang. Volatile En variabel som er deklarert volatile caches ikke (og oppbevares ikke i registre (lenger enn helt nødvending)).en volatile variable skrives helt tilbake i primærlageret før neste instruksjon utføres. fra forelesning om Tråder I Immutable Et fancy ord for final, eller konstant en variabel som aldri endrer verdi. private final char TOM_VERDI_TEGN =. ; 13

Låser og barrierer Opprette kritiske regioner områder kun en tråd være om gangen. Låser hindrer tråder i å arbeide på samme variabel samtidig. Barrierer kan brukes for å hindre tråder i å fortsette før alt er klart. wait/notify er en kombinasjon av både lås og barriere. 14

Lås Den enkleste formen for lås er synchronized foran metoder. 1 public synchronized void oekverdi() { 2 verdien++; 3 } Andre låser er mer fleksible, men krever også mer forståelse: java.util.concurrent.locks.reentrantlock er en lås dere har fått eksempel på i forelesning 15

Barrierer Thread.join() er den enkleste formen for barriere. Den brukes ofte fra main-tråden for å vite når programmet er klar for å skrive ut resultatet. Tråd1 kaller join på tråd2: traad2.join(); Det betyr at Tråd1 venter på den kodelinjen til tråd2 er ferdig (og dermed destruert). wait() er en annen formen for barriere den skal hindre en tråd i å fortsette før situasjonen er klar for det. notify[all]() brukes dermed for å gi beskjed til tråder som venter om at de kan fortsette. (eksempel kommer) Et siste eksempel er java.util.concurrent.cyclicbarrier Minner om join(), men har et gitt antall tråder den venter på. 16

Monitor Et felles objekt som håndterer kommunikasjon mellom tråder. Er til for å sikre at tråder ikke er i kritiske regioner samtidig vha. synchronized eller ReentrantLock Bruker notify for å gi beskjed til tråder i wait om at de kan fortsette. 17

Typiske problemer Ved dårlig låsing eller wait/notifyer det fort å sette en tråd i lås der den aldri får fortsette Dårlig lastfordeling når effektivitet er viktig Sekvensiell løsning ved for mye synchronized eller ved å starte trådene med traad.run(); 18

19

Eksamenstips Forstå at tråder har tilfeldig arbeidstid Lær hva synchronized er: hvilke metoder må være det, og hvorfor ikke alle metoder kan være det Tenk enkelt på wait/notify, tråder venter (wait) til de får beskjed (notify) om å fortsette. Ved bruk av.join(), pass på at alle trådene er startet først. 20