Zadanie z wątków - prośba o wytłumaczenie

0

Cześć mam takie zadanie z javy :

W systemie znajduje się określona i stała liczba urządzeń składujących (US). Użytkownicy przekazują do przechowania w US paczki, zlecają też ich pobranie. Paczki wprowadzane są i pobierane z US za pomocą autonomicznych robotów. Pośrednikiem pomiędzy użytkownikami a robotami jest Państwa oprogramowanie. To do niego użytkownicy przekazują paczki, to ono zarządza ruchem robotów i to ono zwraca użytkownikom paczki, o które poproszą.

Oczywiście, system musi działać współbieżnie. Wielu użytkowników może jednocześnie używać systemu. Wiele robotów może równocześnie wykonywać powierzone im zadania. W trakcie pracy systemu roboty mogą ulegać awarii. Mogą być także wprowadzane nowe roboty.

Uwagi dotyczące pracy systemu:

jeden robot może w danej chwili wykonywać tylko jedno zlecenie. Może przenosić paczkę do US, albo ją stamtąd pobierać - ale nie równocześnie! Przekazanie robotowi nowego zlecenia, w trakcie obsługi poprzedniego, to błąd krytyczny.
jedno US może być w danej chwili obsługiwane tylko przez jednego robota. Zlecenie dwóm robotom wykonywania dowolnej pracy na tym samym US, to błąd krytyczny.
jednoczesne zleceniem dwóm robotom tego samego zadania, to błąd krytyczny.
użytkownik nie może czekać na to, aż jego paczka dotrze do US. Paczki przekazane przez użytkownika muszą być w systemie "buforowane". Z punktu widzenia użytkownika prowadzenie do systemu paczki jest czynnością natychmiastową (tzn. zajmuje znacznie mniej czasu niż jej umieszczenie przez robota w US). Zmuszenie użytkowników systemu do oczekiwania na umieszczenie w US paczek jest niedopuszczalne. Roboczo można założyć, że średni czas umieszczenia paczki w systemie (nie w US) powinien być na poziomie do 10-20 milisekund.
bufor musi być inteligentny. Użytkownik chcący pobrać paczkę, która jeszcze jest w buforze nie może na nią czekać, a paczka nie może odbyć drogi do US i z US. Jeśli jednak paczka już została przekazana z bufora robotowi, to musi odbyć pełen cykl umieszczenia i pobrania jej z US. Czyli, ta sama paczka nie może być jednocześnie u użytkownika i u robota (a w konsekwencji w US).
użytkownik musi czekać na odebranie paczki. Wykonanie metody peek nie może się zakończyć wcześniej niż, gdy bufor lub roboty wraz z US, dostarczą paczkę lub informację, że takiej w danym US nie ma.
jedynym miejscem, w którym może być tymczasowo przechowywana wiedza o paczkach jest bufor. Poza nim oprogramowanie zarządzające nie może przechowywać informacji o paczkach. Jeśli paczka nie jest w buforze, to musi być odebrana (o ile istnieje) z US. Można założyć, że US mogą zawierać paczki jeszcze sprzed uruchomienia Państwa systemu, oraz, że przekazane im paczki mogą zginąć. Aby ustalić czy dana paczka jest w US, czy jej w nim nie ma, trzeba wysłać robota!
paczki w Państwa systemie nie mogą ginąć (jeśli gdzieś zginą to tylko wewnątrz US), ani powielać się. Roboty będą działać poprawnie, ale trzeba nimi poprawnie zarządzać i przekazywać im właściwe dane. Zachowanie robota, któremu powierzona zostanie paczka do umieszczenia w US o błędnym numerze może być dowolne. Ale podkreślam, że sam użytkownik zawsze będzie używał właściwych numerów USid.
dodanie robota do systemu musi być operacją praktycznie natychmiastową. Dodanie robota nie może być wstrzymywane przez oczekiwanie na pojawienie się w systemie paczki czy powrót innego robota z powierzonej mu misji.
W tej samej chwili wiele wątków może wykonać metodę dodającą robota. Robotów nie można zgubić!
dodany do systemu nowy robot musi otrzymać zlecenie wykonania pracy natychmiast, gdy tylko zaistnieje taka możliwość. Podobnie, istniejące w systemie roboty muszą otrzymywać zadania gdy tylko pojawia się taka możliwość - system nie może rozdzielać pracy tylko np. z okazji zakończenia obsługi wcześniejszego zadania. System musi wykorzystywać optymalnie zasoby (roboty, paczki i zbiór urządzeń składujących) i realizować tyle prac równocześnie, ile to jest możliwe.
czasy wykonania zlecenia przez roboty mogą się zmieniać. Mogą być też różne dla różnych robotów. Pomimo tego, system musi optymalnie zarządzać robotami.
uszkodzonemu robotowi nie wolno przekazywać nowych zadań. Jeśli wykonanie metody peek zakończy się zgłoszeniem wyjątku przez robota, to robot ten nie ma prawa uzyskać jakiegokolwiek kolejnego zlecenia. Zlecenie pobrania paczki należy przekazać kolejnemu robotowi natychmiast lub gdy tylko taki będzie dostępny. Zlecenia już rozpoczęte (zlecenie pobranie paczki z US) mają priorytet nad nowymi. Jeśli system będzie mieć do dyspozycji robota, któremu można powirzyć nowe zadanie i zadanie, które nie zostało dokończone z powodu awarii robota, to należy przydzielić do drugie.
System ma działać efektywnie gospodarując zasobami CPU. Używanie procesora w czasie bezczynności (brak zleceń od użytkowników i brak paczek w buforze) jest zabronione - watki, które nie mają co robić powinny być usypianie.
System musi zachowywać się poprawnie nawet w przypadku dużej liczby zleceń. Czasy kolejkowania zleceń klientów nie mogą znacząco rosnąć wraz z liczbą oczekujących na wykonanie operacji na paczkach czy robotów. Chodzi tu o to, aby rozwiązania, które będą tworzyć duże ilości wątków efektywne je blokowały. Usypianie dużej ilości wątków za pomocą jednego obiektu i budzone ich wszystkich przy okazji każdej zmiany w systemie jest zdecydowanie złym rozwiązaniem.

I nie do końca wiem jak się za to zabrać coś tam z wątków w javie czaje ale potrzebuje żeby ktoś mi wytłumaczył jak się za takie zadanie zabrać , o czym poczytać co wykorzystać i mniej więcej jak, bo nie mam kompletnie pomysłu na rozwiązanie tego

0

Ogólnie to robisz po prostu aplikacje typu klient server wielowątkową, tu masz przykład

https://github.com/lyczkul/JavaMultiThreadedApplication

i musisz zaimplementować logikę dla serwera i dla klienta, zgodnie z instrukcjami :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1