Penso che, nella maggior parte dei casi, lo ArrayBlockingQueue
funzionerà meglio dello LinkedBlockingQueue
. Tuttavia, questo è il caso quando c'è sempre abbastanza spazio nell'array ... Se si riempie, non è molto prevedibile se andrà altrettanto bene, poiché bloccherà il thread che sta cercando di spingere i dati nella coda ..Java: ArrayBlockingQueue vs. LinkedBlockingQueue
Quindi, la mia domanda è: Esiste un'implementazione di middle-ground di BlockingQueue
? Supponiamo, uno ArrayListBlockingQueue
o uno BucketListBlockingQueue
? Qualcosa come un elenco di matrici, in modo che la coda possa aumentare in modo dinamico la capacità, pur avendo ancora un vantaggio ragionevole dall'utilizzo di array per archiviare i dati in modo definitivo?
Un elenco di matrici non darebbe un miglioramento delle prestazioni ... Perché dovrebbe? E inoltre: perché sei preoccupato per le prestazioni? Hai avuto davvero problemi? Hai profilo? – Dariusz
Sto pensando alla località di memoria. Se si utilizza un elenco collegato i cui elementi saltano attorno a indirizzi di memoria casuali, è molto più probabile che si verifichino problemi di cache e problemi del genere.Inoltre, per recuperare dalla memoria, devi recuperare l'indirizzo dell'elemento successivo, e quindi recuperare il contenuto di tale indirizzo ... Considerando che, con un array, devi solo fare indirizzo ++ per ottenere l'indirizzo dell'elemento successivo. Con un elenco di matrici, avresti qualche compromesso tra le due implementazioni ... Pensi diversamente? –
Penso che un elenco di matrici ti dia vantaggi da nessuna delle raccolte originali. Devi ancora allocare memoria e, a seconda della dimensione degli array, diventerà più o meno frammentato. Penso che se realizzi correttamente il tuo algoritmo di ridimensionamento delle raccolte basato su array, avrai poche ridimensionazioni e una iterazione molto veloce. Per quanto riguarda la località di memoria - le collezioni memorizzano i riferimenti agli oggetti e quegli stessi oggetti possono trovarsi in qualsiasi punto della memoria, quindi non si otterrà alcun guadagno in tal senso dall'uso di una collezione o di un'altra. – Dariusz