Я понимаю, что наличие всасывания нитей для элементов BlockingQueue
с использованием take()
method будет ждать появления элемента (если только он не прерывается).Должен ли я явно просыпать поток, всасывающий BlockingQueue.take() для производительности?
У меня есть два вопроса:
I) Является ли нить автоматически разбудили вверх, как только элемент становится доступным или есть задержки (то есть нить сама позже чеки)?
ii) Если есть задержка, имеет ли смысл пробудить поток (например, путем прерывания его явно)? Я думаю о латентности и производительности.
@DownVoter: Оставьте комментарий. – MasterCassim
Я могу только предположить, что downvoter, (нет, не был мне :), возражает против «Нет задержки» - может быть задержка планирования. Потребительский поток готов, когда производитель отправляет элемент, но не будет работать сразу, если набор готовых/работающих потоков с более высоким приоритетом, чем потребитель, имеет одинаковые или более элементы, чем количество ядер. В любом случае, прерывание или другое такое возиться с нитью ничего не изменит. Единственный способ свести к минимуму любую задержку - обеспечить, чтобы у потребителя был достаточно высокий приоритет. –
спасибо за объяснение. Я отредактировал свой ответ, потому что я ссылался на дополнительную задержку, которую можно было бы ускорить. – MasterCassim