Elosztott alkalmazások készítése II.
A tárgy a tavaszi félévekben kerül meghirdetésre Programtervező Informatikus mesterszakon, a Szoftvertechnológia specializáció Osztott rendszerek technológiái című blokkjában.
Sillabusz
A tárgy keretein belül a konkurens és párhuzamos programozás fogalomrendszerével ismerkedhetünk meg. A téma bemutatása alapvetően a Java programozási nyelven keresztül történik. Az oktatás heti két óra előadásból és egy óra konzultációból áll. A kurzust vizsga zárja, mely elméleti és programozási részből épül fel. A programozási rész Java nyelven írt programmal teljesítendő. A tárgy elvégzése 3 kreditpontot ér.
Tipikus vizsgafeladat:
Tematika
- Elosztott, párhuzamos és konkurrens programok. Többszálúság.
- Elosztott és megosztott memória a folyamatok közötti kommunikációban.
- Megosztott memória a szálkezelésben: stackek, heap.
- Szálak definiálása és elindítása: Thread és Runnable.
- A java.lang.Thread osztály műveletei.
- Szálak életciklusa.
- Blokkoló tevékenységek.
- Ütemezés: run-to-completion, pre-emption. Időosztás. Minimális időszelet.
- Kontextusváltás és a vele járó költségek.
- Szálak közötti interferencia. Race condition. Szálbiztosság.
- Monitorok működése.
- A volatile szerepe.
- Optimalizációk által okozott anomáliák. Kód átrendezése. Cache. Word-tearing.
- Memóriamodell. A happens-before reláció. Szekvenciális konzisztencia.
- Jól szinkronizált program. Data race. Légből kapott értékek.
- Atomicitás, kizárás és láthatóság biztosítása szinkronizációval.
- Check-then-act. Invariáns több változó felett.
- Belső állapot kiszökése. Biztonságos létrehozás és nyilvánosságra hozás.
- A final mezők szerepe. Módosíthatatlan (immutable) objektumok.
- Szálra korlátozás, objektumra korlátozás.
- Öröklődési problémák.
- Adatszerkezetek. Iterálás.
- Termelő-fogyasztó. Work-stealing.
- Szinkronizátorok (latch, barrier, semaphore). Future.
- Szálak és feladatok. Thread-pool. Executor.
- ExecutionService és CompletionService.
- Szálak leállítása, félbeszakítása.
- Feladat visszavonása (cancellation).
- A wait-notify mechanizmus.
- Holtpont, livelock, kiéheztetés.
- Prioritások. Priority inversion.
- Programok hatékonyságának aspektusai: kiszolgálási idő, áteresztő képesség, válaszidő, skálázódás. Profilozás szerepe. Amdahl és Gustafson törvénye.
- Szinkronizáció költsége. Spin-lock és busy-waiting. Lock spliting.
- Explicit lockok.
- Író-olvasó szinkronizáció.
- CAS, nem blokkoló adatszerkezet.
Irodalom
Goetz, B. és mások: Java Concurrency in Practice. Addison-Wesley Professional, 2006. ISBN-13: 078-5342349603
Gosling, J., Joy, B., Steele, G., Bracha, G., Buckley, A.: The JavaTM Language Specification. https://docs.oracle.com/javase/specs/
Segédanyagok, szlájdok