如果ServerConnector已经配置了AcceptQueueSize,是否需要为QueuedThreadPool指定一个BlockingQueue?

问题描述 投票:0回答:1

在创建Jetty服务器和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 */

之间的关系是什么?"QTP的BlockingArrayQueue""设置ServerConnector的setAcceptQueueSize"如果BlockingArrayQueue在构造函数中设置了maxCapacity参数,那么acceptQueueSize是否会影响这个maxCapacity?

(在上面的代码中,我使用了BlockingArrayQueueSize的基本构造函数,其他构造函数请查看下面的链接。以上代码块中的其他引用类请参考下面的链接。)

java server jetty threadpool jetty-9
1个回答
1
投票

QueuedThreadPool的构造函数参数为 BlockingQueue<Runnable> queue 为需要调整Jetty环境以适应极低的系统利用率和JVM限制的嵌入式系统用户而存在。

Jetty可以(并且确实)在只有16MB内存的嵌入式系统上运行。

如果你使用的是OpenJDK或任何派生版本,那么不要改变队列类型,除非你完全(我的意思是100%理解你正在运行的JVM在它将运行的硬件上的行为)。 使用默认的 BlockingQueue<Runnable> 几乎总是被推荐使用。

如果你正在考虑使用某种替代的调整配置的 BlockingQueue<Runnable> 来实现某种负载或资源利用的限制,那么你就走错了路。 Jetty并不是1个连接1个线程的Container风格,一个单一的连接可能会导致在该单一连接的生命周期内使用多个不同的线程。 你在Jetty中使用的各种技术也会改变你对Jetty的线程需求。你可以很容易地让一个单一的连接、一个单一的请求,使用多个线程来服务该请求(都取决于你在该请求中决定做什么)。

© www.soinside.com 2019 - 2024. All rights reserved.