Нужно ли указывать BlockingQueue для QueuedThreadPool, если ServerConnector уже настроен с AcceptQueueSize? - PullRequest
0 голосов
/ 26 мая 2020

При создании Jetty Server и Jetty ServerConnector,

QueuedThreadPool pool = new QueuedThreadPool(minThread,maxThread,new BlockingArrayQueue());
Server server = new Server​(pool);
/*rest code blah blah*/
ServerConnector servConn = ServerConnector​(server, acceptors, selectors, sslContextFactory);
/*rest code blah blah */
int acceptQueueSize = getAcceptQueueSize();
servConn.setAcceptQueueSize(acceptQueueSize);
/*rest code blah blah */

Какова связь между "BlockingArrayQueue для QTP" и ", устанавливая setAcceptQueueSize для ServerConnector" ? если BlockingArrayQueue установлен с параметром maxCapacity в конструкторе, тогда acceptQueueSize повлияет на этот maxCapacity?

(в приведенном выше коде я использовал конструктор basi c BlockingArrayQueueSize, пожалуйста, проверьте ссылки ниже для других конструкторов. см. ссылки ниже для других классов, на которые есть ссылки в приведенном выше блоке кода)

1 Ответ

1 голос
/ 28 мая 2020

Параметр конструктора QueuedThreadPool для BlockingQueue<Runnable> queue существует для пользователей встроенных систем, которым необходимо настроить свою среду Jetty для чрезвычайно низкого использования системы и / или ограничений JVM.

Jetty может (и работает) работать во встроенных системах которые имеют только 16 МБ ОЗУ.

Если вы используете OpenJDK или любую производную, то не меняйте тип очереди, если вы не полностью (и я имею в виду, что 100% понимаете поведение JVM, на котором вы работаете на оборудовании, на котором он будет работать). Практически всегда рекомендуется использовать реализацию по умолчанию BlockingQueue<Runnable>.

Если вы рассматриваете возможность использования какой-либо альтернативы / настроенной / настроенной BlockingQueue<Runnable> для реализации какого-либо ограничения нагрузки или использования ресурсов, тогда вы падаете неправильный путь. Jetty - это не один поток на 1 стиль соединения Контейнера, одно соединение может привести к использованию нескольких разных потоков в течение срока жизни этого единственного соединения. Использование вами различных технологий в Jetty также может изменить требования к потокам, которые вы предъявляете к Jetty. Вам очень легко создать одно соединение с одним запросом, использовать несколько потоков для обслуживания этого запроса (все зависит от того, что вы решите сделать во время этого запроса).

...