Sto implementando produttore-consumatore dove gli articoli da consumare sono di 1000 tipi type-0, type-1, ..., type-999.
Il produttore inserisce la voce di tipo -i in coda. Consumatore utilizza quello per aggiornare la macchina di stato per tipo-i (una macchina a stati per tipo-i) in base all'elemento (tipo-i) rimosso dalla coda. Ci sono più utenti che stanno leggendo dalla stessa coda (e un produttore)
La condizione è che se un consumatore sta elaborando un articolo di tipo-i, altri consumatori non possono elaborare un articolo dello stesso tipo, quindi se altri consumatori prelevano i prossimi articoli dello stesso tipo-i, tutti i consumatori vengono bloccati e non è una buona soluzione. / p>
Un'altra soluzione è avere 1000 code e 1000 consumatori per ogni tipo-i che non è fattibile
Un'altra soluzione è di avere 10 code e 10 consumatori (uno per ogni coda) e assegnare 100 tipi a Q-1, 100 tipi a Q2 ecc. Ma il problema è se il consumatore-j impiega molto tempo per elaborare item-i tutti gli altri elementi in coda subiranno un ritardo sebbene l'altro consumer-k potrebbe essere inattivo.
Qual è il buon modello di progettazione che possiamo usare qui?
UPDATE:
Soluzione 1: (1 coda - 1 consumatore) per tipo: soluzione migliore ma molti thread
Soluzione 2: (1 Queue - m Consumatori) per n tipi: problema potremmo raggiungere lo stato in cui tutti i consumatori sono in attesa di elaborazione di tipo i mentre il primo utente continua a lavorare su tipo-i tenendo il blocco (tipo-i )
UPDATE 2:
Qui l'ordine degli articoli è IMP e non può essere modificato. È possibile assumere una macchina a stati per tipo-i e il consumatore modifica lo stato in base al nuovo elemento (di tipo-i) ricevuto. Ora puoi capire perché l'ordine degli articoli è importante