Prezentácia sa nahráva. Prosím počkajte

Prezentácia sa nahráva. Prosím počkajte

Osnova prednášky Synchronizácia v Jave

Podobné prezentácie


Prezentácia na tému: "Osnova prednášky Synchronizácia v Jave"— Prepis prezentácie:

1 Osnova prednášky Synchronizácia v Jave
Príklady riešenia synchronizačných nástrojov Solaris Windows XP Linux Pthreads

2 Synchronizácia v Jave Synchronizované príkazy – metóda wait
– metóda notify Násobné notifikácie Synchronizácia blokov programov Java a semafory Java a monitory

3 Java, synchronizovaný príklad
Veľmi podobný princíp monitorom S každým objektom sa druží zámok Pokiaľ metóda, ktorá je definovaná v objekte, NIE JE označená ako synchronizovaná, zámok sa ignoruje Pokiaľ metóda, ktorá je definovaná v objekte, JE označená ako synchronizovaná, volajúci požaduje zámok exkluzívne získať a pokiaľ zámok už niekto drží, volajúci sa umiestni do fronty na zámok, a plánovač JVM ho vyberie na vykonávanie podľa svojej vlastnej politiky Je tu typicky FIFO režim Zámok sa odomyká pri výstupe procesu (vlákna) zo synchronizovanej metódy

4 Java, metódy wait() a notify()
Ak vlákno volá metódu wait( ), vykoná sa: - vlákno uvoľní držaný zámok objektu - vlákno prejde do stavu blokované - vlákno sa umiestni do množiny čakajúcich – do wait set Ak vlákno volá metódu notify( ) , vykoná sa: - vyberie sa niektoré vlákno T z množiny wait set - vybrané vlákno T sa presunie do množiny pripravených – entry set - označí vlákno T ako pripravené – runnable - T teraz opäť môže začať súperiť o zámok Zmyslom je zabrániť uviaznutiu

5 Java, násobné notifikácie
notify() vyberie niektoré vlákno z wait set - nemusí to byť práve to vlákno, ktoré sme chceli, aby sa vybralo Java neumožňuje špecifikovať, ktoré vlákno sa má vybrať notifyAll() - vyberie všetky vlákna z wait set a - umiestni ich do entry set To vláknam umožňuje, aby sa rozhodli, ktoré bude pokračovať vo vykonávaní notify all() je konzervatívna stratégia ktorá najlepšie pracuje práve vtedy, keď vo wait set sa môže nachádzať viac procesov

6 Synchronizácia blokov programov
Doba zamknutia (Scope of lock) je časový interval medzi získaním a uvoľnením zámku blok – časť programu, v žiadnom prípade však nie celá metóda, sa môže deklarovať ako synchronizovaný - realizácia blokov je vcelku kratšia ako realizácia metódy

7 Java a semafory Java semafory nepodporuje.
Semafor je ale možné skonštruovať pomocou synchronizačných mechanizmov podporovaných Javou, napr. – nasledujúci úsek programu

8

9 Príklady riešenia synchronizačných nástrojov
Solaris Windows XP Linux Pthreads

10 Solaris, synchronizácia
Čo vie Solaris: - výpočty v reálnom čase - viacero vlákien - viacero procesov Implementuje širšiu škálu zámkov (lock) s cieľom podporovať: - multitasking, - multivláknovanie (multithreading) vrátane real-time vlákien, a - multiprocessing

11 Solaris, synchronizácia
Synchronizačné nástroje, ktoré používa: Adaptívne mutexy – ochranu dát pre krátke segmenty kódu, (pre krátke kritické sekcie) podporujú semafory – adaptívne mutexy Viac procesorov – štartuje ako štandardný semafor, t.j. ako cyklický zámok (spinlocks) Jeden procesor – ako pre viac procesorov Podmienkové premenné – pre dlhé segmenty kódu (dlhé kritické sekcie) ponúka monitory s podmienkovými premennými a zámky typu readers-writers (čitateľ –pisateľ zámky) Rafinované semafory – pre dlhé segmenty kódu Čitateľ – pisateľ zámky – dáta ku ktorým sa zvyčajne pristupuje iba read-only spôsobom Turniket – je frontová štruktúra obsahujúca vlákna blokované na zámok. Solaris2 používa turniket na určenie poradia frontu vlákien čakajúcich na získanie buď adaptívneho mutexu alebo čitateľ-pisateľ zámku.

12 Windows XP, synchronizácia
Čo vie Windows: - výpočty v reálnom čase - viacero vlákien - viacero procesov Synchronizačné nástroje ktoré poskytuje: - 1 procesor – maskovanie prerušení - viac procesorov: - V jadre – cyklické zámky - Mimo jadra – dispečerov objektov Dispečer objektu - mutex - semafor - udalosť Udalosť – druh dispečerského objektu, ktorý sa správa podobne ako podmienkové premenné.

13 Windows XP, synchronizácia
multivláknové jadro – s podporou real-time apôikácií a multiprocesingu Na jednoprocesorovom stroji chráni globálne zdroje maskovaním prerušení. V multiprocesorových konfiguráciách používa spin-locks (pre krátke kritické sekcie) Podporujú sa dispečerské objekty, ktoré fungujú de facto ako všeobecné semafory alebo binárne semafory (mutexy) Dispečerské objekty môžu podporovať events (udalosti). Events pracujú podobne ako monitory s podmienkovými premennými.

14 Linux, synchronizácia Linux:
Pred jadrovou verziou 2.6, zakazoval prerušenia pre implementáciu krátkych kritických sekcií Verzie 2.6 a neskoršie, úplne preemptívne Linux poskytuje: semafory cyklické zámky (spin locks)

15 Linux, synchronizácia Krátke kritické sekcie na monoprocesore sa riešia zamaskovaním prerušení Multiprocesing sa podporuje pomocou cyklických zámkov Dlhé kritické sekcie (v jadre) riešia semafory

16 Synchronizácia vlákien Pthreads
Na operačnom systéme nezávislé API implementované vo viacerých OS Podporujú sa (poskytuje): mutex locks Binárne semafory Monitory s podmienkovými premennými Neportabilné rozšírenia podporujú: Zámky čítacích a zapisovacích operácií spin locks (cyklické zámky)


Stiahnuť ppt "Osnova prednášky Synchronizácia v Jave"

Podobné prezentácie


Reklamy od Google