KDP/Lab 1 2022
< КДП
Pređi na navigaciju
Pređi na pretragu
- Ovaj rok nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.
Prva laboratorijska vežba 2022. godine nosila je 10 bodova. Isti tekst ponovio se i na narednih nekoliko prvih laboratorijskih vežbi. Za razliku od laboratorijske vežbe za samostalnu vežbu, nije bio dat skelet koda.
Grupa 1
Postavka
Potrebno je napisati Java aplikaciju koja pronalazi broj još uvek aktivnih serija po decenijama. Rešenje mora biti maksimalno konkurentno i otporno na prekide.
Delovi aplikacije:
- Klasa
Producer
obrađuje ulaznu datoteku sa filmovima i informaciju o svakom pojedinačnom filmu ubacuje u deljeni objekat za dalju obradu. Za implementaciju deljenog objekta koristiti Lock ili semafore u zavisnosti od grupe, ali tako da poštuju FIFO poredak. Ova klasa obradu obavlja u svom toku kontrole. Podaci o filmovima se čitaju red po red iz arhive sa filmovima (title.basics.tsv.gz). - Klasa
Consumer
obrađuje informacije o dobijenom filmu i rezultate obrade na kraju prosleđuje na dalju obradu. Ova klasa obradu obavlja u svom toku kontrole. Klasa čita informacije o nekom filmu iz deljenog objekta. Čuva se samo broj serija koje su započele (startYear
nije\N
) a nisu završile (endYear
je\N
) po decenijama. Na svakih K (zadaje se) obrađenih filmova koje jedanConsumer
obradi, ažurira informaciju o svom broju obrađenih filmova koristeći poseban poseban deljeni objekat. Kada ne bude bilo više filmova za obradu,Consumer
prosleđuje svoj broj serija po decenijama dalje korišćenjem deljenog objekta koji mora biti implementiran preko monitora ili regiona u zavisnosti od grupe. - Klasa
Combiner
na osnovu prikupljenih brojeva nezavršenih serija po decenijama određuje ukupan broj nezavršenih serija po decenijama. Ova klasa obradu obavlja u svom toku kontrole. Klasa preuzima podatke iz deljenog objekta i nakon završene obrade rezultat ubacuje u sledeći deljeni objekat. - Klasa
Printer
na svakih M (zadaje se) sekundi štampa informacije o broju obrađenih filmova, sve dok se ne prikupe konačni podaci i na kraju štampa njih na osnovu podataka koje je dostavila klasaCombiner
. Ova klasa obradu obavlja u svom toku kontrole. Izlaz aplikacije je lista koja sadrži deceniju i broj nezavršenih serija u toj deceniji. - Klasa
Test
testira ovaj sistem. Klasa u svojoj početnojmain
metodi kreira sve potrebne deljene objekte, pokreće jednu instancu klaseProducer
, veći (podesiv) broj instanci klaseConsumer
, jednu instancu klaseCombiner
i jednu instancu klasePrinter
. Nakon kompletno završene obrade, štampa koliko je iznosilo ukupno vreme obrade za dati broj niti koje rade obradu. - Nijedna klasa niti (
Producer
,Consumer
,Combiner
,Printer
) ne sme da zna za broj instanci klase Consumer!
Rešenje
Grupa 2
Postavka
Potrebno je napisati Java aplikaciju koja pronalazi broj živih osoba koje su se bavile određenom profesijom po decenijama. Rešenje mora biti maksimalno konkurentno i otporno na prekide.
Delovi aplikacije:
- Klasa
Producer
obrađuje ulaznu datoteku sa osobama i informaciju o svakoj pojedinačnoj osobi ubacuje u deljeni objekat za dalju obradu. Za implementaciju deljenog objekta koristiti Lock ili monitora u zavisnosti od grupe, ali tako da poštuju FIFO poredak. Ova klasa obradu obavlja u svom toku kontrole. Podaci o osobama se čitaju red po red iz arhive sa osobama (name.basics.tsv.gz). - Klasa
Consumer
obrađuje informacije o dobijenoj osobi i rezultate obrade na kraju prosleđuje na dalju obradu. Ova klasa obradu obavlja u svom toku kontrole. Klasa čita informacije o osobama iz deljenog objekta. Čuva se samo broj osoba koje su još uvek žive (deathYear
je\N
) po zanimanjima i decenijama. Na svakih K (zadaje se) obrađenih osoba koje jedanConsumer
obradi, ažurira informaciju o svom broju obrađenih osoba koristeći poseban poseban deljeni objekat. Kada ne bude bilo više osoba za obradu,Consumer
prosleđuje svoj broj osoba po decenijama dalje korišćenjem deljenog objekta koji mora biti implementiran preko regiona ili semafora u zavisnosti od grupe. - Klasa
Combiner
na osnovu prikupljenih brojeva nezavršenih serija po decenijama određuje ukupan broj nezavršenih serija po decenijama. Ova klasa obradu obavlja u svom toku kontrole. Klasa preuzima podatke iz deljenog objekta i nakon završene obrade rezultat ubacuje u sledeći deljeni objekat. - Klasa
Printer
na svakih M (zadaje se) sekundi štampa informacije o broju obrađenih filmova, sve dok se ne prikupe konačni podaci i na kraju štampa njih na osnovu podataka koje je dostavila klasaCombiner
. Ova klasa obradu obavlja u svom toku kontrole. Izlaz aplikacije je lista koja za svaku deceniju ispisuje zanimanja osoba koje su se u njoj rodile i koliko je bilo osoba sa tim zanimanjem. - Klasa
Test
testira ovaj sistem. Klasa u svojoj početnojmain
metodi kreira sve potrebne deljene objekte, pokreće jednu instancu klaseProducer
, veći (podesiv) broj instanci klaseConsumer
, jednu instancu klaseCombiner
i jednu instancu klasePrinter
. Nakon kompletno završene obrade, štampa koliko je iznosilo ukupno vreme obrade za dati broj niti koje rade obradu. - Nijedna klasa niti (
Producer
,Consumer
,Combiner
,Printer
) ne sme da zna za broj instanci klase Consumer!