Вопрос

Я работаю над проектом, использующим очередь, в которой хранится информация о сообщениях, которые необходимо отправить на удаленные хосты. В этом случае один поток отвечает за размещение информации в очереди, а другой поток отвечает за получение информации из очереди и ее отправку. 2-й поток должен периодически проверять очередь на наличие информации.

Но позже я обнаружил, что это переизобретение колеса :) Я мог бы использовать блокирующую очередь для этой цели.

Каковы другие преимущества использования очереди блокировки для вышеуказанного приложения? (Пример: производительность, модифицируемый код, любые специальные приемы и т. Д.)

Это было полезно?

Решение

Основным преимуществом является то, что BlockingQueue обеспечивает правильную, поточно-ориентированную реализацию. Разработчики внедрили эту функцию самостоятельно в течение многих лет, но это сложно сделать правильно. Теперь у среды выполнения есть реализация, разработанная, проверенная и поддерживаемая экспертами по параллелизму.

" блокирование " Характер очереди имеет пару преимуществ. Во-первых, при добавлении элементов, если емкость очереди ограничена, потребление памяти также ограничено. Кроме того, если потребители очереди слишком сильно отстают от производителей, производители естественным образом ограничиваются, поскольку им приходится ждать добавления элементов. При извлечении элементов из очереди основным преимуществом является простота; ожидание навсегда тривиально, а правильное ожидание указанного тайм-аута лишь немного сложнее.

Другие советы

Ключевой вещью, которую вы исключаете из очереди блокировки, является «опрос». Здесь вы говорите

  

В этом случае 2-й поток должен периодически проверять очередь на наличие информации.

Это может быть очень неэффективно - использовать много ненужного процессорного времени. Это также может привести к ненужным задержкам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top