Domanda

Sto lavorando a un progetto che utilizza una coda che conserva le informazioni sui messaggi che devono essere inviati agli host remoti. In tal caso, un thread è responsabile dell'inserimento delle informazioni nella coda e un altro thread è responsabile dell'ottenimento delle informazioni dalla coda e dell'invio. Il secondo thread deve controllare periodicamente la coda per le informazioni.

Ma più tardi ho scoperto che si tratta di reinvenzione della ruota :) Potrei usare una coda di blocco per questo scopo.

Quali sono gli altri vantaggi dell'utilizzo di una coda di blocco per l'applicazione sopra? (Ad esempio: prestazioni, modificabile del codice, eventuali trucchi speciali ecc.)

È stato utile?

Soluzione

Il vantaggio principale è che un BlockingQueue fornisce un'implementazione corretta e sicura per i thread. Gli sviluppatori hanno implementato questa funzione da anni, ma è difficile farlo bene. Ora il runtime ha un'implementazione sviluppata, rivista e gestita da esperti di concorrenza.

Il " blocco " la natura della coda ha un paio di vantaggi. Innanzitutto, aggiungendo elementi, se la capacità della coda è limitata, anche il consumo di memoria è limitato. Inoltre, se i consumatori in coda sono troppo indietro rispetto ai produttori, i produttori sono naturalmente limitati poiché devono aspettare per aggiungere elementi. Quando si prendono elementi dalla coda, il vantaggio principale è la semplicità; aspettare per sempre è banale e attendere correttamente un timeout specificato è solo un po 'più complicato.

Altri suggerimenti

La cosa fondamentale da eliminare con la coda di blocco è il "polling". Questo è dove dici

  

In tal caso il secondo thread deve controllare periodicamente la coda per le informazioni.

Questo può essere molto inefficiente, impiegando molto tempo CPU non necessario. Può anche introdurre latenze non necessarie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top