VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

Programmeringsparadigmer.
07 – Kort om OO Introduktion.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Distribueret programmering, specielt.NET Remoting Rasmus D. Lehrmann DM
DS-kursusgang nr. 6: distribuerede objekter 1. Intro (oversigt over grundl₣ggende begreber og komponenter) 2. De basale designspørgsm ₢ l ved konstruktion.
Første generation (maskiner/operativsystemer) 45-55: radiorør Kun maskinsprog programmering = skrivning af nullerog ettaller Intet operativsystem programmør.
DS-kursusgang nr. 5: Sockets Intro Java-klasser til at arbejde med sockets. Forskellen på sockets i C og i Java. TCP/IP protokol familjen. Afslutning:
Hvordan man skriver koden.
Sockets Logiske endepunkter mellem server og klient På applikationsniveauet betragtes Sockets som pålidelige Sockets optræder parvis Til en Socket er der.
Hvorfor trådning? Performance Responsivness. Succeskriterier Forbedring af performance –Opgaverne skal være uafhængige –Jo flere afhængige opgaver, jo.
VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
11.1 Mathiassen, Munk-Madsen, Nielsen & Stage, 2000 © Processer Oversigt, principper og teknikker Kapitel 11.
SDP - Repetition Sockets Trådning Delegater Remoting Sprogteori
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer.
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
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
GP 5, 26/ Grundlæggende programmering Efterår 2001 Forelæsning 5 onsdag 26/ kl. 9:15 – 12:00.
Objekter og klasser Rasmus D. Lehrmann DM
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
Procestræ under afvikling af cp init login shell cp cp src dest.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets.
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.
Hvad består en distribueret applikation af ? Processer der kører på hver deres maskine Tråde - 1 eller flere "letvægtsprocesser" per proces Objekter i.
 Processer og tråde  Implementation af tråde  Trådinterferens  Synkronisering  Atomare aktiviteter.
Repetition af dIntProg v/ Morten D. Bech. Tour de force Variabler Løkker Comparable ImErKo-reglen Eksamenssæt dIntProg, E13.
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.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Samtidighed. Disposition Formål med tråde Eksempel på fordel ved tråde Thread-pooling Livscyklus Problemstillinger Algoritmer ◦Dekkers ◦Peterson Opsumering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
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.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIProgrammering af Store Systemer1 Concurrency i Java – Samarbejdende tråde.
Indledende Programmering Uge 6 - Efterår 2006
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Parallel programming Rasmus D. Lehrmann DM
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Tråde og synkronisering
Præsentationens transcript:

VPG/Otto Knudsen1 VPR - Repetition Trådning Distribueret Programmering Sprogteori Grafer

VPG/Otto Knudsen2 Tråde Tråd (lightweight process) Enkel sekventiel kontrolsekvens i et program Deler fælles data

VPG/Otto Knudsen3 Trådning Fordele Overvågningssystemer med flere uafhængige opgaver Muliggør brugerinteraktion via BGF Muliggør serverhåndtering af flere samtidige klienter Udnytter flerprocessor-systemer optimalt

VPG/Otto Knudsen4 Tråde Ulemper Trådene afvikles uafhængigt af hverandre Afviklingsrækkefølgen er vilkårlig Samspillet mellem tråde er ofte meget kompleks Problemer med safety og liveness

VPG/Otto Knudsen5 Instantiering af tråde Tråde kan skabes på 2 måder: Arve fra Thread -klassen Implemetere Runnable -interfacet

VPG/Otto Knudsen6 Tråde

VPG/Otto Knudsen7 Thread-klassen Skabe en tråd vha. Thread extends Thread-klassen Overskriv run-metoden Lav en instans af trådklassen Kald metoden start() på denne instans

VPG/Otto Knudsen8 Thread-klassen class Tråd extends Thread { public void run() { kode } }... new Tråd().start();

VPG/Otto Knudsen9 Runnable-interfacet Implements Runnable-interfacet implementér run-metoden Lav en instans af trådklassen Lav en ny Thread -instans med Runnable -objektet som argument Kald metoden start() på denne instans

VPG/Otto Knudsen10 Runnable-interfacet class Tråd implements Runnable { public void run() { kode } }... new Thread(new Tråd()).start();

VPG/Otto Knudsen11 Runnable-interfacet class Tråd implements Runnable { public void run() { kode } public void start() { new Thread(this).start(); }... new Tråd().start();

VPG/Otto Knudsen12 Trådes livscyklus

VPG/Otto Knudsen13 Trådsikre klasser Problem: Hvis en tråd afbrydes, medens den arbejder på et objekt, er der risiko for, at objektet efterlades i en inkonsistent tilstand. Dette kan give problemer, når en anden tråd forsøger at få tilgang til objektet

VPG/Otto Knudsen14 Trådsikre klasser Løsning: Løsningen er at forhindre mere end én tråd ad gangen i at få tilgang til de kritiske områder i koden Vha. synkronisering opnår en tråd eneret på et objekt (lås) Låsen frigives, når tråden forlader det kritiske område eller ved kald af metoden wait() på objektet. Kritiske områder på samme objekt deler samme lås!

VPG/Otto Knudsen15 Liveness problemer Starvation (udhungring): En tråd, som er i tilstanden ready, får aldrig lejlighed til at køre, fordi der findes andre tråde med højere prioritet Dormancy (dvale): En tråd, som er i tilstanden blocked on wait, vækkes aldrig med notify() Deadlock (hårdknude): To eller flere tråde kæmper om flere fælles ressourcer, og hver tråd efterspørger på samme tid disse ressourcer Premature Termination (for tidlig død): En tråd termineres for tidligt og hindrer derved andre tråde i at blive vækket. (Evig dvale)

VPG/Otto Knudsen16 volatile vs. synchronized Anvend volatile på en attribut, hvis denne kan tilgås af flere tråde; med mindre at alle trådene tilgår attributten gennem synkroniserede metoder (kodeblokke) Hvis flere tråde samtidigt kan tilgå en attribut, og mindst én af disse kan ændre i attributtens værdi, så er det generelt en god idé at anvende synchronized til at styre tilgangen Hvis kun én tråd kan tilgå attributten, så er brugen af synchronized overflødig og sløver programafviklingen

VPG/Otto Knudsen17 Brug af synchronized Nødvendig, hvis man vil lave "trådsikre klasser" Ej omkostningsfrit: Kræver CPU-kraft  langsommere programafvikling "Hellere for mange synkroniserede blokke end for få!" MEN - pas på deadlocks

VPG/Otto Knudsen18 Monitor En monitor indkapsler fælles ressourcer som private attributter og sikrer trådene enetilgang vha. synchronized metoder til de kritiske områder Formål: Overvågning af trådes adgang til fælles ressourcer Objekt, hvor de fælles ressourcer er samlet (attributter) Der er udelelig adgang til monitorens metoder (mutex) Én monitor-metode pr. kritisk sektion

VPG/Otto Knudsen19 Missed notification Problem notify sendes før wait Konsekvens notify mistes og wait -tråden bliver ved med at vente Løsning Sørg for kun at gå i wait, hvis notify endnu ikke er sendt. Sæt evt. en boolsk variabel, når notify sendes, og gå kun i wait, hvis denne variabel er sat Konklusion Sørg for at samle én begivenhed i ét synkroniseret monitorkald

VPG/Otto Knudsen20 Early notification Problem notify sendes før betingelserne for wait er opfyldt Konsekvens wait -tråden vækkes før tid Løsning Check (igen) betingelserne for wait, når wait -tråden vækkes Konklusion Anvend altid while (i stedet for if ) i forbindelse med check af wait -betingelser

VPG/Otto Knudsen21 Early notification 1. Bufferen er tom! 2. C1-tråden er i wait-tilstand 3. P-tråden generer et nyt element og kalder monitorens synkroniserede put-metode 4. C1-tråden underrettes via notify, og tråden går i ready-tilstand 5. P-tråden forlader monitorens put-metode og slipper objekt-låsen på monitoren 6. Bufferen indeholder nu ét element! 7. Trådskifte! 8. C2-tråden trækker et element fra bufferen ved at kalde monitorens get-metode 9. C2-tråden forlader monitorens get-metode og slipper objekt- låsen på monitoren 10. Der er ingen elementer i bufferen! 11. Trådskifte! 12. C1 fortsætter nu fra wait i monitorens get-metode i forsøget på at trække endnu et element fra bufferen … Dette er ikke muligt!

VPG/Otto Knudsen22 Guarded Suspension public synchronized void put(String data) throws InterruptedException { while (buffer.isFull()) // while i stedet for if this.wait(); if (buffer.isEmpty()) this.notify(); buffer.add(data); } public synchronized String get() throws InterruptedException { while (buffer.isEmpty()) // while i stedet for if this.wait(); if (buffer.isFull()) this.notify(); String data = (String)buffer.remove(); return data; }

VPG/Otto Knudsen23 Observer Pattern

VPG/Otto Knudsen24 Distribueret Programmering Sockets RMI CORBA (ej pensum) JDBC (ej pensum)

VPG/Otto Knudsen25 Sockets Sockets er logiske endepunkter i en forbindelse mellem server og klient På applikationsniveauet betragtes Sockets som ”pålidelige”, dvs. data som sendes fra den ene ende af forbindelsen modtages i den anden ende i samme rækkefølge, som de er sendt, og uden tab Sockets optræder parvis – klienten har en Socket til serveren og omvendt En Socket er tilknyttet både en InputStream OutputStream Klientens OutputStream er forbundet til serverens InputStream og omvendt

VPG/Otto Knudsen26 Sockets - Arkitektur

VPG/Otto Knudsen27 Sockets - Serversiden 1. Skab en ServerSocket på portnr 2000 (fx) try { ServerSocket s = new ServerSocket(2000); } catch (IOException e) {} 2. Vent på forespørgsel fra klient while (true) { Socket socket = s.accept(); } 3. Skab InputStream og OutputStream ud fra Socket BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 4. Send og modtag via InputStream og OutputStream in.read(); out.println(); 5. Luk strømme og Sockets

VPG/Otto Knudsen28 Sockets - Klientsiden 1. Skab en Socket til serveren vha. hostname og portnr try { Socket s = new Socket(”localhost”, 2000); } catch(IOException e) {} 2. Skab InputStream og OutputStream ud fra Socket BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream())); PrintWriter out = new PrintWriter(s.getOutputStream(), true); 3. Send og modtag via InputStream og OutputStream in.read(); out.println(); 4. Luk strømme og Socket

VPG/Otto Knudsen29 Sockets - Strømme

VPG/Otto Knudsen30 Flere samtidige klienter Server class Server { public static void main(String[] args) { try { ServerSocket s = new ServerSocket(2000); while (true) { // Vent på anmodning fra klient... Socket socket = s.accept(); // Instantiér klienttråd - og start den... new ClientHandler(socket).start(); } } catch (IOException e) {} }

VPG/Otto Knudsen31 Flere samtidige klienter ClientHandler class ClientHandler extends Thread { private Socket incoming; public ClientHandler(Socket incoming) { this.incoming = incoming; } public void run() { try { // Instantiér ind- og ud-strøm while (true) { // Kommunikér } } catch (IOException e) {} }

VPG/Otto Knudsen32 RMI RMI (Remote Method Invocation) Kald af metoder på serverobjekt fra klient Filosofi Objekter på serveren gøres tilgængelige på klienten Abstraktionsniveau Højere abstraktionsniveau end Sockets Objektorienteret – Syntaksen svarer til almindelig Java Fælles data og funktionalitet Transparens – Der arbejdes med serverobjekterne, som om de lå på klienten Miljø RMI findes kun til Java

VPG/Otto Knudsen33 RMI - Arkitektur

VPG/Otto Knudsen34 RMI - Arkitektur 1. Kald af metoden server.metode() fra klienten udføres som et metodeklad på stub’en: stub.metode() 2. Stub’en arrangerer argumenterne i metodekaldet, (marshalling), og sender dem til skeleton’en på serveren tillige med information om kaldet 3. Skeleton’en afkoder argumenterne samt informationen om kaldet, (demarshalling), og kalder metoden på serveren: server.metode() 4. Serverobjektet eksekverer metodekaldet og sender eventuel en returværdi til skeleton’en 5. Skeleton’en arrangerer returværdien, (marshalling), og sender resultatet til stub’en 6. Stub’en afkoder, (demarshalling), returværdien og returnerer den til klienten

VPG/Otto Knudsen35 RMI – Begreber Marshalling Arrangering af information om metodekald, dvs. objekt-id, metodenavn, argumenter og returværdier Lokale objekter Objekter, som kun kan tilgås lokalt, enten på serveren eller på klienten. Lokale objekter, der overføres som argumenter eller returværdier skal implementere markør-interfacet Serializable Remote objekter Objekter, som er tilgængelige fra andre maskiner/processer. Remote objekter skal implementere markør-interfacet Remote Remote reference Reference til et objekt, der fysisk er placeret på en anden maskine/proces. Referencen indeholder ip-adresse, portnr samt objekt- id på serverobjektet Remote metodekald Kald af servermetode fra klient. Ved remote metodekald overføres lokale objekter by value og remote objekter by reference

VPG/Otto Knudsen36 RMI – Proxy-mønsteret

VPG/Otto Knudsen37 RMI - Serversiden import java.rmi.*; public interface Konto extends Remote {... // metodeerklæringer public double indsaet(double beloeb) throws RemoteException; } import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class KontoServer extends UnicastRemoteObject implements Konto {... // attributter double saldo; public KontoServer() throws RemoteException { super(); saldo = 0.0; }... // metodeimplementeringer public double indsaet(double beloeb) throws RemoteException { saldo += beloeb; return saldo; }

VPG/Otto Knudsen38 RMI - Kontoeksemplet

VPG/Otto Knudsen39 Forløbet af et RMI-kald (1) 1. Definér et interface (kontrakt) til et remote objekt public interface Konto extends java.rmi.Remote {... public double indsaet(double beloeb) throws RemoteException; } 2. Implementér ovenstående interface på serversiden public class KontoServer extends java.rmi.server.UnicastRemoteObject implements Konto {... public double indsaet(double beloeb) throws RemoteException; }

VPG/Otto Knudsen40 Forløbet af et RMI-kald (2) 3. Skab en instans af NameServer-objektet på en given port (fx 1099) vha. LocateRegistry java.rmi.registry.LocateRegistry.createRegistry(1099); 4. Skab en instans af serveren og registrér serveren i RMI- registry Konto server = new KontoServer(); java.rmi.Naming.rebind("Konto", server); 5. Generér stub og skeleton class-filer vha. RMI-compile Filerne får navnene KontoServer_Stub.class og KontoServer_Skeleton.class Stub-klassen implementerer også Konto-interfacet

VPG/Otto Knudsen41 Forløbet af et RMI-kald (3) 6. Lokalisér remote objektet – konto er nu en instans af stub- klassen, som implementerer Konto-interfacet Konto konto = (Konto)java.rmi.Naming.lookup("//localhost:1099/Konto") 7. Lav en klient, som anvender metoderne på konto-objektet: konto.indsaet(100);

VPG/Otto Knudsen42 RMI – MathInterface package math; import java.rmi.*; public interface MathInterface extends Remote { public int add(int a, int b) throws RemoteException; public int sub(int a, int b) throws RemoteException; public int mul(int a, int b) throws RemoteException; public int div(int a, int b) throws RemoteException, ArithmeticException; }

VPG/Otto Knudsen43 RMI - MathServer package math; import java.rmi.*; import java.rmi.server.*; public class MathServer extends UnicastRemoteObject implements MathInterface { public MathServer() throws RemoteException {} public int add(int a, int b) throws RemoteException{return a + b;} public int sub(int a, int b) throws RemoteException{return a - b;} public int mul(int a, int b) throws RemoteException{return a * b;} public int div(int a, int b) throws RemoteException, ArithmeticException {return a / b;} }

VPG/Otto Knudsen44 RMI - Server package math; import java.rmi.*; import java.rmi.registry.*; public class Server { public static void main(String[] args) { try { LocateRegistry.createRegistry(1099); Naming.bind("Math", new MathServer()); System.out.println("Serveren er registreret"); } catch (RemoteException e) {System.exit(1);} }

VPG/Otto Knudsen45 RMI - Klient package math; import java.rmi.*; public class MathClient { public static void main(String[] args) { MathInterface math = null; try { math = (MathInterface)Naming.lookup("Math"); System.out.println("1 + 2 = " + math.add(1, 2)); System.out.println("3 + 4 = " + math.add(3, 4)); System.out.println("5 + 6 = " + math.add(5, 6)); System.out.println("7 + 8 = " + math.add(7, 8)); } catch (Exception e) {System.exit(1);} }