LinkedBlockingQueue пут vs оффер

У меня есть связанная очередь блокировки, в которой я выполняю операции вставки и удаления.

Мне нужно знать, какой из них лучше put или offer в случае связанной очереди блокировки.

Параметры производительности — это загрузка ЦП, памяти и общая пропускная способность.

Использование приложения — это система реального времени, в которой может быть несколько входящих запросов и меньше потоков для обработки, когда нам нужно будет вставить элемент в очередь.

Я читал документы Java о put и offer, во внутреннем приложении не было большой разницы.


person Scientist    schedule 17.10.2013    source источник


Ответы (3)


На самом деле, вы не можете сравнить производительность между этими двумя, метод offer заключается в том, чтобы просто предлагать в очередь, и он не ждет или ждет указанное время, но метод put ждет бесконечно долго, пока не освободится место, поэтому их использование другой.

Используйте put, если вы не можете позволить себе потерять элемент, имея в виду, что он задержит ваш стек вызовов, в противном случае используйте offer.

person codingenious    schedule 17.10.2013

LinkedBlockingQueue полностью реентерабельна, и метод poll() не блокирует вызов put(). Однако метод poll() будет вращаться. Вероятно, вам следует использовать функцию queue.take(), которая ожидает появления элемента в очереди, а не возвращает значение null, если очередь пуста.

Также рассмотрите этот сценарий: метод poll(long, TimeUnit) будет ожидать добавления элемента в очередь в течение периода времени и возвращает значение null, если таймер истекает. Это более чистое ожидание, чтобы дождаться чего-то в очереди.

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

Документация ясно дает ответ на этот вопрос. Предложение не ждет и «откажется», если очередь достигла своего предела. Однако put будет ждать, пока освободится место, другими словами, он будет блокироваться до тех пор, пока не освободится место. Поэтому предложение явно быстрее, так как оно никогда не блокируется.

person KyleM    schedule 17.10.2013