DAIMIProgrammering af Store Systemer1 Concurrency i Java – Samarbejdende tråde.

Slides:



Advertisements
Lignende præsentationer
Medicin From sponsor to subjekt Set fra en studynurse’ perspektiv Birgitte Scheldt.
Advertisements

Anskaffelse af ny teknologi
Separation af de variable
Manuelle målstyrings-tavler
SSQ12-C SSQ12-C Instruktioner De følgende spørgsmål drejer sig om din evne til – og oplevelse i forbindelse med – at høre og lytte i forskellige situationer.
Halv- eller helårsturneringer Udtræk fra undersøgelse Indkomne svar 27.
Formularer (Access, del 3)
Klinisk Q-sort accept Instruktion: Skriv de følgende to slides ud på et stykke papir eller karton med print på begge sider. Tjek at de rigtige numre står.
Koordinatsystemet Y-aksen 2. aksen X-aksen 1. aksen.
// Semaphore.java package semaphore; public class Semaphore { int resources = 1; // Constructors Semaphore() {} Semaphore(int i) { resources = i; } synchronized.
Design af brugerflader11.1 Kursusgang 11 Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing.
Tråde og synkronisering. Tråde To typer tråde Dedikerede tråde -programmør opretter og tilknytter metode -”kører tråd-metoden (job) én gang” Tråd pulje.
Hvorfor trådning? Performance Responsivness. Succeskriterier Forbedring af performance –Opgaverne skal være uafhængige –Jo flere afhængige opgaver, jo.
FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer.
VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
Operativsystemer [3]: Synkronisering og baglåse Datalogi 1F: Forår 2003 Jørgen Sværke Hansen
11.1 Mathiassen, Munk-Madsen, Nielsen & Stage, 2000 © Processer Oversigt, principper og teknikker Kapitel 11.
Forelæsning 3.1 Collections Javas for-each løkke
Velkommen til Green Field. Hvad er Green Field? På Green Field er alting muligt: Her er ingen restriktioner Her kan man udfolde sig Her er alle imødekommende.
1 Tråde 2 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil.
To måder at overføre objekt- referencer mellem processer (1) Via naming service - interface RMISolver (2) Som parametre til fjernprocedurekald - interface.
Fundamentale datastrukturer
1. Database-systemer, introduktion
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
8.6 Transaktioner1 Transaktioner 8.6 Transactions in SQL.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Transaktioner og ACID Spørgsmål 8. Transaktioner og ACID ACID (Atomicity, Consistency, Isolation, Durability) ACID-egenskaber er sæt egenskaber, der garanterer.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
 Processer og tråde  Implementation af tråde  Trådinterferens  Synkronisering  Atomare aktiviteter.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
Forelæsning 7.1 – repetition
Deadlock Definition deadlock (baglås) er en tilstand som en mængde af processer kan være i en mængde processer er i deadlock hvis alle processerne står.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Samtidighed. Disposition Formål med tråde Eksempel på fordel ved tråde Thread-pooling Livscyklus Problemstillinger Algoritmer ◦Dekkers ◦Peterson Opsumering.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Velkommen Formålet med denne workshop er At teste forskellige former at teknologiunderstøtte etablere af samarbejde på hospitaler. Målet med dette er:
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
Deadlock Definition deadlock (baglås) er en tilstand som en mængde af processer kan være i en mængde processer er i deadlock hvis alle processerne står.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
Køreteknik Sæt I gang Før du kører ud i trafikken, skal du kunne køre din knallert sikkert. Du skal kunne holde balancen, trække, sætte i gang, standse,
Quiz – Uge 3 – mandag – første time
Implementering og dokumentation
Tråde og synkronisering
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

DAIMIProgrammering af Store Systemer1 Concurrency i Java – Samarbejdende tråde

DAIMIProgrammering af Store Systemer2 Samarbejdende tråde  Uafhængige tråde er der få problemer i.  Tråde som tilgår delte ressorcer kræver disciplin og mekanismer såsom monitorer og klient-side synkronisering.  Når tråde decideret skal samarbejde bliver det rigtigt sjovt!

DAIMIProgrammering af Store Systemer3 Et klassisk eksempel  Producer/Consumer Tænk f.eks. på printer køen i et netværk  Hvordan får vi dataflowet effektivt uden vi mister data?  Problemet er at Consumer skal afvente at der er noget at aftage, Producer afvente plads i køen... ProducerBuffer/KøAftager

DAIMIProgrammering af Store Systemer4 Buffer implementation  Bufferen skal have metoder void store(Object o); Object retrieve()  Da det gemte objekt naturligvis er en delt ressource mellem producent og aftager, skal bufferen være en monitor.  Men hvad gør vi hvis aftageren ’retriever’ uden der er noget i bufferen?

DAIMIProgrammering af Store Systemer5 Retrieve  Basalt set bliver den nødt til at vente på at der kommer noget ind i bufferen. Det giver to mulige steder at vente: i klient-side koden –bliv ved med at kalde ’retrieve’ af og til, indtil vi får fat i noget. –det kaldes også ’polling’ og koster en masse spildtid i buffer-koden –vent inde i ’retrieve’ til der er indsat noget –men - vi er i en monitor - så der er ingen der kan indsætte noget!!!  Virker kun når producent og aftager arbejder i såkaldt ’lock-step’ = i perfekt takt.

DAIMIProgrammering af Store Systemer6 Dead locks  Den sidst skitserede situation er slem: vi venter på at een skal indsætte noget i bufferen samtidigt sørger vores egen udelelige adgang for at dette aldrig sker...  Denne skitserede situation kaldes en dead-lock - systemet stopper ganske simpelt!  Dead-locks er erfaringsmæssigt meget svære at opspore i ens kode - og kan have katastrofale følger i vital software...

DAIMIProgrammering af Store Systemer7 Konklusion  En tråd må ikke blokere en monitor når dens eneste chance for at forlade monitoren er at en anden tråd ændrer monitorens tilstand.  Oversat: En tråd må ikke vente i ’retrieve’ når det eneste som kan få den ud af dens venteposition er at en anden får adgang til at ’store’ noget...

DAIMIProgrammering af Store Systemer8 En kommunikationskanal class Buffer { Object p; boolean empty = true; synchronized public void store(Object p) { ??? this.p = p; empty = false; } synchronized public Object retrieve() { ??? empty = true; return p; }

DAIMIProgrammering af Store Systemer9 await class Channel { Object p; boolean empty = true; synchronized public void store(Object p) { await (empty); this.p = p; empty = false; } synchronized public Object retrieve() { await (!empty); empty = true; return p; } En ”løsning” med await (ej Java)

DAIMIProgrammering af Store Systemer10 await i Java class Channel { Object p; boolean empty = true; synchronized public void store(Object p) { while (!empty) { try { wait() ; } catch (InterruptedException ie) {} } this.p = p; empty = false; notifyAll() ; } synchronized public Object retrieve() { while (empty) { try { wait() ; } catch (InterruptedException ie) {} } empty = true; notifyAll() ; return p; }

DAIMIProgrammering af Store Systemer11 Semantik  wait() og notify() er metoder på Object (monitoren):  wait() foretager to ting udeleligt: tråden i monitoren skifter til vente tilstand og afgiver afviklingsretten objektets monitor låses op i.e. ”lyskurven skifter til grønt”  notify() tråden som har ventet længst i ventekøen skifter tilstand til ’runnable’ og indsættes nu i køen over tråde som venter på afviklingsret.

DAIMIProgrammering af Store Systemer12 Semantik  notifyAll() ’vækker’ alle tråde som er i vente tilstand på den pågældende monitor.  Bemærk at notifyAll() oftest er det ’rigtige’ valg. At en tråd har ventet længe er ikke det samme som at den kan løse konflikten. eks.: Hvis en aftager er først i ventekøen fulgt af en producer, og en aftager netop har taget objektet i bufferen - og derfor siger ’notify()’

DAIMIProgrammering af Store Systemer13 Hvorfor en while?  Hvorfor skal der være en while løkke uden om wait() ???  Vi har stadig en race condition når flere tråde venter på monitor adgang.  Eks.: En producer siger notify og fire aftagere står i vente- køen.

DAIMIProgrammering af Store Systemer14 Dead locks  Et andet eksempel på dead-locks er når flere tråde skal have fat i flere ressourcer: ”De fattige skribenter” –To skribenter deler 1 blyant og 1 stykke papir –For at skrive skal de have både blyant og papir –Scenarie: Skribent A tager blyanten Skribent B tager papiret Nu venter de begge på udelelig adgang til en ressource som den anden sidder inde med. Æv...

DAIMIProgrammering af Store Systemer15 Tommelfingerreglen  En tommelfingerregel for at løse deadlocks er at skaffe udelelig adgang for flere ressourcer i samme rækkefølge.  Men der er også eksempler på det går galt...