2013-10-17 9 views
11

ho una coda di blocco collegato in cui io sono l'esecuzione di operazioni di inserimento e rimozione.LinkedBlockingQueue messo vs offerta

Ho bisogno di sapere quale è meglio put o offer in caso di coda di blocco collegato.

Parametri di prestazione sono l'utilizzo della CPU, memoria e throughput complessivo.

utilizzo delle applicazioni è il sistema in tempo reale dove non ci può essere di più richieste in arrivo e meno thread per gestire in cui avremo bisogno di inserire elementi in coda.

ho letto docs Java di put e offerta non c'era molta differenza in applicazione interna.

risposta

11

In realtà, non è possibile confrontare le prestazioni tra i due, il metodo offer è quello di offrire solo alla coda e non aspettare o attende il tempo specificato, ma il metodo put attende all'infinito lungo fino a quando lo spazio è disponibile, quindi il loro utilizzo è diverso.

Utilizzare put in cui non è possibile permettersi di perdere un articolo, tenendo presente che verrà trattenuto lo stack di chiamate, altrimenti utilizzare offer.

1

LinkedBlockingQueue è completamente rientrante ed il metodo poll() non blocca la put(). Tuttavia, il metodo poll() ruoterà. Probabilmente si dovrebbe usare queue.take(), che aspetta che ci sia un elemento in coda invece di restituire null se la coda è vuota.

Considerare anche questo scenario, il metodo di polling (long, TimeUnit) attende un elemento da aggiungere alla coda per il periodo di tempo e restituisce null se il timer scade. È un'attesa più pulita per aspettare qualcosa in coda.

// wait for 2000ms for there to be an object in the queue 
    Object o = queue.poll(2000, TimeUnit.MILLISECONDS); 
    // no sleep necessary 
    return o; 
1

La documentazione rende chiara la risposta a questa domanda. L'offerta non aspetta e "si arrende" se la coda ha raggiunto la capacità. Tuttavia, put attenderà che lo spazio diventi disponibile - in altre parole, bloccherà fino a quando lo spazio non sarà disponibile. Quindi l'offerta è ovviamente più veloce poiché non blocca mai.

Problemi correlati