https://github.com/carusel02/dispatcher
Build a dispatcher in Java
https://github.com/carusel02/dispatcher
dispacher hosts java policy task threads
Last synced: 6 months ago
JSON representation
Build a dispatcher in Java
- Host: GitHub
- URL: https://github.com/carusel02/dispatcher
- Owner: Carusel02
- Created: 2023-12-01T23:20:21.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-02-23T20:48:41.000Z (over 1 year ago)
- Last Synced: 2025-02-09T09:15:19.695Z (8 months ago)
- Topics: dispacher, hosts, java, policy, task, threads
- Language: Java
- Homepage:
- Size: 45.9 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# README
## [Tema2 - APD](https://gitlab.cs.pub.ro/apd/tema2)
##### MARIN MARIUS DANIEL 332CC### Ideea de baza
Modificarea clasei `MyDispacher` ce are ca rol impartirea
task urilor catre hostii corespunzatori in functie de politica
si modificarea clasei `MyHost` ce executa task urile primite.### Implementare
#### In clasa `MyDispatcher` avem urmatoarele politici:
1. `RoundRobin`
2. `ShortestQueue`
3. `SizeIntervalTask`
4. `LeastWorkLeft`Am folosit un enhanced switch pentru a apela metoda corespunzatoare fiecarei politici in functie de algoritm
#### Pentru metodele:
* `RoundRobin` se parcurge lista de hosti si se trimite
fiecare task pe rand unui host
* `ShortestQueue` se afla coada cu numarul minim de task uri
si se trimite task ul catre hostul corespunzator apeland
functia `getQueueSize` din clasa `MyHost`
* `SizeIntervalTask` se trimite task ul catre hostul corespunzator (folosind tot un enhanced switch) in functie de dimensiunea task ului
* `LeastWorkLeft` se afla coada cu cel mai putin timp de calcul ramas si se trimite task ul catre hostul corespunzator apeland functia `getWorkLeft` din clasa `MyHost`#### In clasa `MyHost` avem urmatorii parametrii:
* `PriorityQueue` - coada de task uri sortata dupa prioritate, apoi dupa timpul de sosire
* `lock` - lock pentru a realiza sincronizarea
* `isRunning` - flag pentru a sti daca hostul este inca in executie
* `haveThread` - flag pentru a sti daca hostul are threaduri in executie
* `globalTask` - task ul global al hostului
* `timeStart si timeEnd` - timpul de inceput si de sfarsit al task ului global
#### In clasa `MyHost` avem urmatoarele metode:
* `run`
- se ruleaza un loop infinit cat timp ruleaza hostul
- se alege primul task din coada si se executa
* `addTask`
- se adauga task ul in coada
- se notifica thread ul din metoda `run` ca s-a adaugat un task nou in
cazul in care task ul are prioritate mai mare si poate fi preemptat task ul curent
care se executaCa si metode de sincronizare am folosit `synchronized` pentru a sincroniza metoda addTask
din clasa `MyDispatcher` deoarece sunt mai multi TaskGeneratori care adauga task uri apeland
dispatcher ul.Am folosit si variabila de tip lock pentru a sincroniza metoda run si metoda addTask din clasa `MyHost`
deoarece sunt thread uri care ruleaza in paralel si pot aparea probleme de sincronizare.Am folosit si o coada de task uri de tip `PriorityBlockingQueue` pentru operatiile ei care sunt
thread safe.### Mai multe detalii se regasesc in cod.