КДП/Лаб 1 2022

Извор: SI Wiki
< КДП
Датум измене: 26. јул 2022. у 19:59; аутор: KockaAdmiralac (разговор | доприноси) (Postavka naše lab vežbe od ove godine)
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу
Овај рок није решен. Помозите SI Wiki тако што ћете га решити.

Прва лабораторијска вежба 2022. године носила је 10 бодова. Исти текст поновио се и на наредних неколико првих лабораторијских вежби. За разлику од лабораторијске вежбе за самосталну вежбу, није био дат скелет кода.

Група 1

Поставка

Потребно је написати Јава апликацију која проналази број још увек активних серија по деценијама. Решење мора бити максимално конкурентно и отпорно на прекиде.

Делови апликације:

  • Класа Producer обрађује улазну датотеку са филмовима и информацију о сваком појединачном филму убацује у дељени објекат за даљу обраду. За имплементацију дељеног објекта користити Lock или семафоре у зависности од групе, али тако да поштују FIFO поредак. Ова класа обраду обавља у свом току контроле. Подаци о филмовима се читају ред по ред из архиве са филмовима (title.basics.tsv.gz).
  • Класа Consumer обрађује информације о добијеном филму и резултате обраде на крају прослеђује на даљу обраду. Ова класа обраду обавља у свом току контроле. Класа чита информације о неком филму из дељеног објекта. Чува се само број серија које су започеле (startYear није \N) а нису завршиле (endYear је \N) по деценијама. На сваких K (задаје се) обрађених филмова које један Consumer обради, ажурира информацију о свом броју обрађених филмова користећи посебан посебан дељени објекат. Када не буде било више филмова за обраду, Consumer прослеђује свој број серија по деценијама даље коришћењем дељеног објекта који мора бити имплементиран преко монитора или региона у зависности од групе.
  • Класа Combiner на основу прикупљених бројева незавршених серија по деценијама одређује укупан број незавршених серија по деценијама. Ова класа обраду обавља у свом току контроле. Класа преузима податке из дељеног објекта и након завршене обраде резултат убацује у следећи дељени објекат.
  • Класа Printer на сваких M (задаје се) секунди штампа информације о броју обрађених филмова, све док се не прикупе коначни подаци и на крају штампа њих на основу података које је доставила класа Combiner. Ова класа обраду обавља у свом току контроле. Излаз апликације је листа која садржи деценију и број незавршених серија у тој деценији.
  • Класа Test тестира овај систем. Класа у својој почетној main методи креира све потребне дељене објекте, покреће једну инстанцу класе Producer, већи (подесив) број инстанци класе Consumer, једну инстанцу класе Combiner и једну инстанцу класе Printer. Након комплетно завршене обраде, штампа колико је износило укупно време обраде за дати број нити које раде обраду.
  • Ниједна класа нити (Producer, Consumer, Combiner, Printer) не сме да зна за број инстанци класе Consumer!

Решење

Група 2

Поставка

Потребно је написати Јава апликацију која проналази број живих особа које су се бавиле одређеном професијом по деценијама. Решење мора бити максимално конкурентно и отпорно на прекиде.

Делови апликације:

  • Класа Producer обрађује улазну датотеку са особама и информацију о свакој појединачној особи убацује у дељени објекат за даљу обраду. За имплементацију дељеног објекта користити Lock или монитора у зависности од групе, али тако да поштују FIFO поредак. Ова класа обраду обавља у свом току контроле. Подаци о особама се читају ред по ред из архиве са особама (name.basics.tsv.gz).
  • Класа Consumer обрађује информације о добијеној особи и резултате обраде на крају прослеђује на даљу обраду. Ова класа обраду обавља у свом току контроле. Класа чита информације о особама из дељеног објекта. Чува се само број особа које су још увек живе (deathYear је \N) по занимањима и деценијама. На сваких K (задаје се) обрађених особа које један Consumer обради, ажурира информацију о свом броју обрађених особа користећи посебан посебан дељени објекат. Када не буде било више особа за обраду, Consumer прослеђује свој број особа по деценијама даље коришћењем дељеног објекта који мора бити имплементиран преко региона или семафора у зависности од групе.
  • Класа Combiner на основу прикупљених бројева незавршених серија по деценијама одређује укупан број незавршених серија по деценијама. Ова класа обраду обавља у свом току контроле. Класа преузима податке из дељеног објекта и након завршене обраде резултат убацује у следећи дељени објекат.
  • Класа Printer на сваких M (задаје се) секунди штампа информације о броју обрађених филмова, све док се не прикупе коначни подаци и на крају штампа њих на основу података које је доставила класа Combiner. Ова класа обраду обавља у свом току контроле. Излаз апликације је листа која за сваку деценију исписује занимања особа које су се у њој родиле и колико је било особа са тим занимањем.
  • Класа Test тестира овај систем. Класа у својој почетној main методи креира све потребне дељене објекте, покреће једну инстанцу класе Producer, већи (подесив) број инстанци класе Consumer, једну инстанцу класе Combiner и једну инстанцу класе Printer. Након комплетно завршене обраде, штампа колико је износило укупно време обраде за дати број нити које раде обраду.
  • Ниједна класа нити (Producer, Consumer, Combiner, Printer) не сме да зна за број инстанци класе Consumer!

Решење