Che cosa è più conveniente: Traversal utilizzando n iteratori di un singolo o ConcurrentHashMap n istanze di un HashMap

StackOverflow https://stackoverflow.com/questions/4723056

Domanda

Immaginate uno scenario produttore-consumatore, infilare un produce voci, uno a molti altri thread li consumi.

Per questo sto passando un sacco di voci a ogni thread consumatore.

Do fare questo sto chiedendo se è più conveniente (primario nel senso di cpu utlization, secondaria in memoria):

  • per fornire ogni consumatore filo un'istanza separata di un HashMap. Dopo aver superato il Map di un consumatore, una nuova istanza della Map viene creato e utilizzato per passare le voci accanto prodotte all'altro filo

o

  • di utilizzare un unico ConcurrentHashMap e crea un Iterator per ogni filettature dei consumatori e dopo aver superato il Iterator alla filettatura compensazione del Map -. Modo che ogni Iterator contiene una propria vista del sottostante Map

Cosa ne pensi? È una risposta più o meno generico possibile?
O è fortemente dipendente di alcune variabili come il numero di voci, discussioni, ecc?
EDIT:? o dovrei usare qualche altro tipo di struttura dati che possono meglio risolvere questi tipi di problemi

È stato utile?

Soluzione

Il pacchetto concomitante java fornisce una struttura di dati per questo scenario esatto.

@see java.util.concurrent.BlockingDeque

Ma per favore fare qualche prova di perfomance: perché i risultati dipendono stongly sul caso si utilizza. E se si tratta solo di micro ottimizzazione, di una:. Pulito, facile da capire, filo Salva approccio sarebbe molto meglio di quanto l'ottimizzazione delle prestazioni del whithout impatto

Altri suggerimenti

La cosa più costosa cpu-saggio è discussioni contesa. Sembra, il vostro primo approccio produrrà alcun conflitto a tutti - ogni thread avrà è la versione locale del Map -. A spese del consumo di memoria più elevato
Mi piacerebbe, per esempio, punto di riferimento due scenari per diverse configurazioni (n ° di fili, dimensioni di carta, ecc), che ha senso. E 'difficile dire le cifre esatte, senza punto di riferimento.

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