Attualmente sto affrontando un problema nell'applicazione che sto sviluppando e penso che sia lo stesso, o un analogo, del Dining Problema dei filosofi .
Nella mia applicazione ho una lista di N risorse. Ho anche una coda di attività che richiede un numero da 1 a N di queste risorse da eseguire (che vengono generate continuamente a intervalli sconosciuti). Quello che mi piacerebbe fare è eseguire il maggior numero possibile di questi compiti in parallelo, senza lasciare che un'attività rimanga stagnante per troppo tempo.
Available resources: A, B, C
---------------------------------------------------------------------------------------
[T=4] Task 4 requires resource(s): A, C Takes 4 time to complete <-- Last in queue
[T=3] Task 3 requires resource(s): A Takes 1 time to complete
[T=2] Task 2 requires resource(s): C Takes 1 time to complete
[T=1] Task 1 requires resource(s): A, B, C Takes 1 time to complete
[T=0] Task 0 requires resource(s): B Takes 6 time to complete <-- First in queue
Dire che inizio ad elaborare le attività in arrivo. A T=0
vedo Task 0
e lo avvio perché la risorsa necessaria è aperta. A T=0
vedo Task 1
ma non posso avviarlo perché tutte le sue risorse non sono aperte per eseguirlo. A T=2
vedo Task 2
e lo avvio perché la risorsa necessaria è aperta. A T=3
vedo Task 3
e lo avvio perché la risorsa necessaria è aperta. A T=4
vedo Task 4
e lo avvio perché la risorsa A
e C
sono liberi perché Task 2
e Task 3
completati rapidamente.
In questo caso Task 1
è diventato stagnante a causa delle specifiche esigenze di tempo e risorse delle attività che sono entrate nella coda. Mentre ho eseguito le attività il più rapidamente possibile, ora ho consentito alle attività di diventare stagnanti.
Il contrario di questa strategia, in cui attendo che tutte le risorse per ogni attività siano disponibili in ordine di attività, non riesce anche perché potrei svolgere attività in parallelo mentre aspetto che le risorse diventino disponibili.
Esiste una soluzione / strategia per questo problema in cui ottengo un buon compromesso tra concorrenza e ristagno delle attività?
La mia convinzione in questo scambio è addirittura reale o sto solo delineando gli scenari peggiori per una soluzione ottimale / più conosciuta?