160 likes | 254 Views
Fejlett Programozási Technológiák II. 12. gyakorlat. Világos Zsolt. Mai gyakorlat. Threads – Szálak Process vs szál Szálkezelési módok Szál definiálása Szemafor és monitor Mutual Exclusion és programelemek. Process vs szál. Time slicing
E N D
Fejlett Programozási Technológiák II. 12. gyakorlat Világos Zsolt
Mai gyakorlat • Threads – Szálak • Process vs szál • Szálkezelési módok • Szál definiálása • Szemafor és monitor • Mutual Exclusion és programelemek Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Process vs szál • Time slicing • mulitask megvalósítása: időosztásos os-ek, vagy több processzor/mag/gép (PVM) • Processeknek és szálaknak is van prioritása • Java: 10 szint van, leképezés os-re: JVMThread.{Max | Min | Norm}Priority • Windowsban azt hiszem 7 van Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Process vs szál • Process • Minden processnek saját végrehajtási környezete van (pl saját memória terület) • 1 program = 1-* process • Process közti kommunikáció: IPC (Inter Process Communication) • Egy gépen vagy több gép között • Java: ProcessBuilder és Process osztályok Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Process vs szál • Thread • Saját végrehajtási környezete van • Indítása olcsóbb mint egy process indítása • Hajrá Occam! • 1 Process = 1-* szál • Előny: thread osztozik process erőforrásain • Hátrány: kommunikáció kölcsönös kizárás Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Szálkezelési módok • Két mód van rá • Direkt szál menedzsment • java.lang.Runnable és ~.Thread • Magasabb (absztraktabb API) • java.util.concurrent • (thread pool) • elsővel foglalkozunk Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Szál definiálása • Szál definiálása • két mód: • Runnable interfész implementálása • Thread osztályból származtatás, mely osztály implementálja a fenti interfészt • előző preferáltabb az egyszeres öröklődés miatt Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Mai gyakorlat • Szemafor és monitor • A szemafor a párhuzamosság alapvető eszköze • alkalmas kölcsönös kizárásra és szinkronizálásra is • hátránya, hogy a kezelő kód szétszórt • Monitor: fogjuk össze a kódokat Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Monitor • Java-ban minden objektum viselkedhet monitorként. • Az Object ősosztály nyújtja ezt a szolgáltatást metódusok által • wait(), wait(long timeout) • notify(), notifyAll() Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Monitor • Szerkezet: • valósítsuk meg a közös erőforrást egy osztályban • a rajta végzett műveletek legyenek metódusok, melyek kezelik a kommunikációs problémákat • a kritikus rész így központosítottam lesznek Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Object • Metódusok: • wait(), wait(long timeout) • az aktuális szál az objektum várakozási sorába kerül, amíg egy másik szál notify(All)-t nem hív • timeout: előző + max timeout ms-ig • notify(), notifyAll() • az első egy szálat kivesz a várakozási sorból • a második mindegyiket kiveszi a sorból Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Thread • Metódusok: • sleep(long time) • az akt szál time ideig várakozik • join(Thread t) • aktuális szál vár, amíg t szál terminál • overload változatával timeout is megadható • start()/stop() • szál indítás és megállítás (utóbbi Deprecated) Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Thread • Metódusok: • interrupt() • megszakítja a szál futását • átállítja a belső interrupted flag-et • wait és … hívások ellenőrzik a flag-et, és ha megszakították a szálat, akkor hibát dobnak • InterruptedException • nincs konvenció, kezelése a programozó feladata Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Synchronized • Kölcsönös kizárás része • két helyen lehet • függvény előttpublic synchronized void doit() {…} • függvényben, blokk előttsynchronized (Object o) {…}pl.: synchronized (this) {…} • hatása: a megjelölt kódrészletet egyszerre csak egy szál hajthatja végre Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Synchronized működés • Statikus metódusok esetén az osztályt leíró Class objektumhoz rendelt monitort használja a kód • Példány metódus esetén az adott objektum kerül használatba Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt
Köszönöm a figyelmet! Fejlett Programozási Technológiák II. gyakorlat - Világos Zsolt