150 likes | 317 Views
Prezentacija seminara Višedretvenost u Javi. Luka Samaržija Voditelj: mr. Sc. Marko Čupić Zagreb, 09.06.2009. Uvod. Razvoj programskih jezika započinje 50-tih godina prošlog stoljeća Prvo se pojavljuju asembleri – brzo izvršavanje, ali prevelik kod Pojava viših programskih jezika
E N D
Prezentacija seminaraVišedretvenost u Javi Luka Samaržija Voditelj: mr. Sc. Marko Čupić Zagreb, 09.06.2009.
Uvod • Razvoj programskih jezika započinje 50-tih godina prošlog stoljeća • Prvo se pojavljuju asembleri – brzo izvršavanje, ali prevelik kod • Pojava viših programskih jezika • Dijele se na sekvencijalne, proceduralne, funkcijske i objektno orjentirane
Programski jezik Java • Objektno orijentirani viši programski jezik • Razvoj započinje 1991. godine – James Gosling i Patrick Naughton iz kompanije Sun Microsystems • Projekt naziva “Green” – stvaranje platformski nezavisnog jezika za izvođenje na svim vrstama mikroprocesora
Programski jezik Java • Izvodi se na svim operacijskim sustavima gdje postoji Java virtualna mašina • Bajt-kod • Podrška za višedretvenost
Procesi • Računalo obavlja neki korisni posao tako da izvodi programe pripremljene i višem programskom jeziku • Program u izvođenju nazivamo proces • Svaki proces ima svoj zaseban dio memorijskog prostora
Procesi • Višeprogramski rad – više procesa se odvija paralelno koristeći različita računalna sredstva • Bolja iskorištenost računalnih sredstava • Privid paralelnosti
Dretve • Odvijanje procesa obavlja se izvođenjem njegovog niza instrukcija – izvođenjem njegove dretve • Višedretvenost – svaka dretva izvodi jedan podzadatak • Dretve se izvršavaju prividno paralelno
Problem sinkronizacije • Više dretvi pišu i čitaju iz istog dijela memorijskog prostora procesa • Dretva pisač mijenja podatke koje dretva čitač čita • Dretva čitač raspolaže netočnim podacima zbog čega daje netočne rezultate • Dretve se moraju sinkronizirati
Binarni semafor • Poprima dvije vrijednosti 1 – semafor je prolazan 2 – semafor je neprolazan • Dretva koja naiđe na prolazan semafor ulazi u kritični odsječak te postavlja vrijednost semafora na 0 • Prilikom izlaske iz kritičnog odsječka postavlja vrijednost na 1
Opći semafor • Poprima vrijednosti iz skupa prirodnih brojeva i nulu • Kada dretva pokuša proći semafor vrijednost se smanjuje za 1 • Prilikom izlaska iz kritičnog odsječka vrijednost se povečava za 1 • Semafor je neprolazan ako je vrijednost jednaka 0
Potpuni zastoj • Potpuni zastoj može nastati kada se najmanje dvije dretve natječu za najmanje dva sredstva. To je stanje u kojem obje dretve ostanu zauvijek blokirane na nekom semaforu čekajući da ga ona druga dretva postavi. Dretva Di: Dretva Dk: Ispitaj Bsem[1]; Ispitaj Bsem[2]; Ispitaj Bsem[2]; Ispitaj Bsem[1]; ..... .....
Sinkronizirane metode class Brojac { private int c = 0; public void increment() { c++; } public void decrement() { c--; } public int value() { return c; } }
Sinkronizirane metode Pogledajmo kakav će biti tijek izvođenja: 1. Dretva A: Uzima vrijednost varijable c. 2. Dretva B: Uzima vrijednost varijable c. 3. Dretva A: Increment povećava vrijednost za 1. 4. Dretva B: Decrement smanjuje vrijednost za 1. 5. Dretva A: Sprema rezultat u varijablu c; vrijednost od c je sada 1. 6. Dretva B: Sprema rezultat u varijablu c; vrijednost od c je sada -1.
Paket java.util.concurrent Implementacija redova: • BlockingQueue • SynchronousQueue • PriorityBlockingQueue
Paket java.util.concurrent • Razred semaphore • metoda acquire • Razred CountDownLatch • Razred CyclicBarrier