Top Banner
PROCESSPROGRAMMERING PROCESSPROGRAMMERING Föreläsning 1 (31.8.2010) Föreläsning 1 (31.8.2010) Innehåll: Innehåll: Introduktion till paralellprogrammering Introduktion till paralellprogrammering (“concurrent programming”) (“concurrent programming”) Introduktion till parallellprogrammering i Java: Introduktion till parallellprogrammering i Java: med trådar (threads) med trådar (threads) Lågnivåprogrammering av trådobjekt Lågnivåprogrammering av trådobjekt Introduktion till Java Applets Introduktion till Java Applets
17

PROCESSPROGRAMMERING

Jan 20, 2016

Download

Documents

Dustin

Föreläsning 1 (31.8.2010) ‏ Innehåll : Introduktion till paralellprogrammering (“ concurrent programming ”) ‏ Introduktion till parallellprogrammering i Java: med trådar ( threads ) Lågnivåprogrammering av trådobjekt Introduktion till Java Applets. PROCESSPROGRAMMERING. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: PROCESSPROGRAMMERING

PROCESSPROGRAMMERINGPROCESSPROGRAMMERINGFöreläsning 1 (31.8.2010)Föreläsning 1 (31.8.2010)

Innehåll:Innehåll:

Introduktion till paralellprogrammering (“concurrent programming”)Introduktion till paralellprogrammering (“concurrent programming”)

Introduktion till parallellprogrammering i Java: med trådar (threads)Introduktion till parallellprogrammering i Java: med trådar (threads)

Lågnivåprogrammering av trådobjektLågnivåprogrammering av trådobjekt

Introduktion till Java AppletsIntroduktion till Java Applets

Page 2: PROCESSPROGRAMMERING

Introduktion till Introduktion till paralellprogrammeringparalellprogrammering

Traditionellt har man skrivit programkod för Traditionellt har man skrivit programkod för seriell seriell processering (serial computing)processering (serial computing) Planerade för att köras på en dator med en CPUPlanerade för att köras på en dator med en CPU Ett problem spjälks upp i en diskret serie av instruktionerEtt problem spjälks upp i en diskret serie av instruktioner Instruktioner exekveras en efter enInstruktioner exekveras en efter en Endast en instruktion kan exekveras åt gångenEndast en instruktion kan exekveras åt gången

Page 3: PROCESSPROGRAMMERING

Introduktion till Introduktion till paralellprogrammeringparalellprogrammering

I sin enklaste form är parallell processering (parallell computing) samtidig användning av I sin enklaste form är parallell processering (parallell computing) samtidig användning av multipel “hårdvara” för att lösa ett problem. multipel “hårdvara” för att lösa ett problem.

Parallellprogrammering lämpar på datorer med multipla CPUnParallellprogrammering lämpar på datorer med multipla CPUn Ett problem spjälks upp i diskreta delar som kan lösas samtidigtEtt problem spjälks upp i diskreta delar som kan lösas samtidigt Varje del spjälks upp vidare i en serie av instruktioner (som i seriell progr.)Varje del spjälks upp vidare i en serie av instruktioner (som i seriell progr.) Instruktioner från varje del exekveras samtidigt på olika CPUnInstruktioner från varje del exekveras samtidigt på olika CPUn

Page 4: PROCESSPROGRAMMERING

Introduktion till Introduktion till paralellprogrammeringparalellprogrammering

Paralellprogrammering lämpar sej väl inte endast på en dator med flere CPUn utan också Paralellprogrammering lämpar sej väl inte endast på en dator med flere CPUn utan också över ett nätverk dit flere datorer är kopplade eller en kombination av bådaöver ett nätverk dit flere datorer är kopplade eller en kombination av båda

Page 5: PROCESSPROGRAMMERING

Varför paralellisering av program?Varför paralellisering av program?

Viktigaste orsakerna:Viktigaste orsakerna: Spara tidSpara tid Lösa större problemLösa större problem Möjliggöra “samtidighet” i programMöjliggöra “samtidighet” i program

Andra orsaker kan varaAndra orsaker kan vara Utnyttja datorressurser i ett nätverkUtnyttja datorressurser i ett nätverk Kostnadsbesparing - använda multipla billiga datorresurser i stället för att satsa Kostnadsbesparing - använda multipla billiga datorresurser i stället för att satsa

på en superdatorpå en superdator

Page 6: PROCESSPROGRAMMERING

Framtiden för parallelliseringFramtiden för parallellisering

Trenden för framtiden tyder påTrenden för framtiden tyder på Ännu snabbare nätverkÄnnu snabbare nätverk Distribuerade systemDistribuerade system Datorarkitekturer med multipla processorer (gäller även vanliga bordsdatorer)Datorarkitekturer med multipla processorer (gäller även vanliga bordsdatorer)

---> ---> PARALLELLISERING ÄR FRAMTIDEN INOM DATATEKNIK!!!!PARALLELLISERING ÄR FRAMTIDEN INOM DATATEKNIK!!!!

Page 7: PROCESSPROGRAMMERING

Olika typer av parallella programOlika typer av parallella program

Parallellisering kan klassificeras i fyra olika typer (enligt Flynn's klassiska taxonomi):Parallellisering kan klassificeras i fyra olika typer (enligt Flynn's klassiska taxonomi): SISD (Single Instruction, Single Data)SISD (Single Instruction, Single Data) SIMD (Single Instruction, Multiple Data)SIMD (Single Instruction, Multiple Data) MISD (Multiple Instruction, Single Data)MISD (Multiple Instruction, Single Data) MIMD (Multiple Instruction, Multiple Data)MIMD (Multiple Instruction, Multiple Data)

För mera info se För mera info se http://www.ddj.com/212903586?cid=RSSfeed_DDJ_All

Page 8: PROCESSPROGRAMMERING

Paralellprogrammering i Java Paralellprogrammering i Java m.h.a. trådarm.h.a. trådar

Det enklaste sättet att åstadkomma parallell exekvering och “samtidighet” (concurrency) i Det enklaste sättet att åstadkomma parallell exekvering och “samtidighet” (concurrency) i ett Java-program är att använda trådar (threads)ett Java-program är att använda trådar (threads)

Trådar möjliggör att multipla strömmar av ett programs flöde kan existera inom en Trådar möjliggör att multipla strömmar av ett programs flöde kan existera inom en processprocess

Alla trådar inom en och samma process delar resurser som minne, (file handlers) osv. Alla trådar inom en och samma process delar resurser som minne, (file handlers) osv. men en tråd kan däremot ha egna lokala variabler, stackar osv.men en tråd kan däremot ha egna lokala variabler, stackar osv.

Flere trådar inom samma program kan exekveras samtidigt på multipla processorer Flere trådar inom samma program kan exekveras samtidigt på multipla processorer (CPUn)(CPUn)

Page 9: PROCESSPROGRAMMERING

Fördelar med trådarFördelar med trådar

Förbättrar prestandan hos enskilda program om trådar används på rätt sättFörbättrar prestandan hos enskilda program om trådar används på rätt sätt I multiprocessor datorerI multiprocessor datorer Även i datorer med en processor (p.g.a. alternering, se tavlan!)Även i datorer med en processor (p.g.a. alternering, se tavlan!)

Förenklad hantering av asynkrona händelserFörenklad hantering av asynkrona händelser Tänk dej t.ex. en Web server som skall klara av att sätta upp HTTP-förbindelser Tänk dej t.ex. en Web server som skall klara av att sätta upp HTTP-förbindelser

med flere Web klienter samtidigt!med flere Web klienter samtidigt! Varje klientförbindelse kan startas upp i en egen tråd på Web servernVarje klientförbindelse kan startas upp i en egen tråd på Web servern

““Mottagligare” användargränssnittMottagligare” användargränssnitt

Page 10: PROCESSPROGRAMMERING

Trådprogrammering i JavaTrådprogrammering i Java

Trådar existerar i alla processer av Java program som exekveras. Trådar existerar i alla processer av Java program som exekveras.

Alla processer har åtminstone en huvudtråd. Alla processer har åtminstone en huvudtråd.

Program med flera samtidigt exekverande trådar är viktig eganskap i Java platformen. Program med flera samtidigt exekverande trådar är viktig eganskap i Java platformen.

Huvudtråden (main thread) kan vid behov starta upp flera paralella trådar. Huvudtråden (main thread) kan vid behov starta upp flera paralella trådar.

Page 11: PROCESSPROGRAMMERING

Trådprogrammering i JavaTrådprogrammering i Java

Varje tråd i Java är associerad med en instans av klassen Varje tråd i Java är associerad med en instans av klassen Thread. Thread.

Det finns i Java två strategier för att använda Det finns i Java två strategier för att använda Thread Thread objekt för att göra program med objekt för att göra program med flera samtidigt exekverande trådar:flera samtidigt exekverande trådar:

Lågnivå programmering av trådobjekt Lågnivå programmering av trådobjekt Hantering av trådobjekt på hög nivå m.h.a ”executors”Hantering av trådobjekt på hög nivå m.h.a ”executors”

Den förstnämnda strategin är baserad på en lågnivå ”API” som har varit en del av Java Den förstnämnda strategin är baserad på en lågnivå ”API” som har varit en del av Java sedan första början. Denna API lämpar sej bra för programmering av enkla sedan första början. Denna API lämpar sej bra för programmering av enkla ””multiprocessing” program.multiprocessing” program.

För större program med massor av samtidgt exekverande trådar lämpar sej ”executors”-För större program med massor av samtidgt exekverande trådar lämpar sej ”executors”-modellen bättre. Denna metod har funnits fr.o.m. JDK Version 5.0. modellen bättre. Denna metod har funnits fr.o.m. JDK Version 5.0.

Vi börjar med llågnivå modellen eftersom den är lättare att förstå! Vi börjar med llågnivå modellen eftersom den är lättare att förstå!

Page 12: PROCESSPROGRAMMERING

Att definiera och starta en trådAtt definiera och starta en tråd

En applikation skapar en instans av klassen En applikation skapar en instans av klassen Thread Thread och definierar den kod som skall och definierar den kod som skall köras i en egen tråd.köras i en egen tråd.

Det finns två sätt att göra detta på. Det finns två sätt att göra detta på.

Metod1:Metod1:

public class TradTest implements Runnable public class TradTest implements Runnable {{

public void run() public void run() { {

System.out.println("Hej! Jag är en trad som kors parallelt med huvudtraden!"); System.out.println("Hej! Jag är en trad som kors parallelt med huvudtraden!"); } }

public static void main(String args[]) public static void main(String args[]) { {

Thread th = new Thread(new TradTest());Thread th = new Thread(new TradTest());th.start(); th.start(); System.out.println("Hej! Jag är huvudtraden!");System.out.println("Hej! Jag är huvudtraden!");

}} }}

Page 13: PROCESSPROGRAMMERING

Att definiera och starta en trådAtt definiera och starta en tråd

I koden på föregående sida implementerar huvudklassen ett objekt av gränssnittet I koden på föregående sida implementerar huvudklassen ett objekt av gränssnittet RunnableRunnable. .

Gränssnittet Gränssnittet Runnable Runnable definierar en metod definierar en metod run() run() dit det är meningen att man skall dit det är meningen att man skall placera den kod som skall exekveras i en egen tråd. placera den kod som skall exekveras i en egen tråd.

I huvudmetoden startar man upp en ny tråd genom att skapa ett nytt objekt av klassen I huvudmetoden startar man upp en ny tråd genom att skapa ett nytt objekt av klassen Thread Thread via vilket man anropar metoden via vilket man anropar metoden start()start(). . Runnable- Runnable- objektet ges som parameter till objektet ges som parameter till konstruktorn för klassen konstruktorn för klassen Thread()Thread(). .

Page 14: PROCESSPROGRAMMERING

Att definiera och starta en trådAtt definiera och starta en tråd

Metod2:Metod2:

public class TradTest extends Thread public class TradTest extends Thread {{ public void run() public void run() {{ System.out.println("Detta ar en paralell trad!");System.out.println("Detta ar en paralell trad!"); }}

public static void main(String args[]) public static void main(String args[]) {{ (new TradTest()).start();(new TradTest()).start(); System.out.println("Detta är huvudtraden!");System.out.println("Detta är huvudtraden!"); }}}}

Page 15: PROCESSPROGRAMMERING

Att definiera och starta en trådAtt definiera och starta en tråd

I koden på föregående sida nedärvs klassen I koden på föregående sida nedärvs klassen Thread Thread i huvudklassen. i huvudklassen.

Klassen Klassen ThreadThread implementerar gränsnittet implementerar gränsnittet Runnable Runnable och behöver därför inte och behöver därför inte implementeras i det egna Java-programmet. implementeras i det egna Java-programmet.

Från huvudmetoden startar man upp en ny tråd genoma att skapa ett nytt Från huvudmetoden startar man upp en ny tråd genoma att skapa ett nytt Thread Thread objekt objekt via vilket man anropar metoden via vilket man anropar metoden start().start().

Page 16: PROCESSPROGRAMMERING

Att definiera och starta en trådAtt definiera och starta en tråd

VILKEN METOD ÄR BÄTTRE???VILKEN METOD ÄR BÄTTRE???

Metod 2 är enklare men mer begränsande eftersom en klass som hanterar flera Metod 2 är enklare men mer begränsande eftersom en klass som hanterar flera samtidiga trådar måste vara en underklass av klassen samtidiga trådar måste vara en underklass av klassen Thread. Thread.

I den här kursen kommer vi att koncentrera oss på metod1. I den här kursen kommer vi att koncentrera oss på metod1.

Page 17: PROCESSPROGRAMMERING

Klassen Klassen ThreadThread

Exempel på metoder som kan användas via klassen Thread är: Exempel på metoder som kan användas via klassen Thread är: start()start() – Startar en ny tråd – Startar en ny trådstop()stop()- Stänge en tråd- Stänge en trådsleep()sleep()- Pausar en tråd för en viss tid- Pausar en tråd för en viss tid

Detaljerad information om klassen Detaljerad information om klassen Thread Thread med alla dess egenskaper hittas i Java API med alla dess egenskaper hittas i Java API dokumentationen: dokumentationen: http://java.sun.com/javase/6/docs/api/