gpt4 book ai didi

java - 如何为并行 Web 服务请求配置线程池?

转载 作者:行者123 更新时间:2023-11-30 10:27:53 26 4
gpt4 key购买 nike

我想将网络服务调用并行发送到网络服务。最多应该有 20 个并行请求等待 Web 服务响应。任何其他请求都应等待它们完成。

如果单个用户向我发送请求,这通常会导致向目标服务器发送 5 个并行请求。所以我一次最多可以服务 20/5 = 4 个用户。其他人将不得不等待,这很好。或者在非常高的负载下被拒绝。

问题:我应该使用哪个线程池,我应该如何配置它?

private ExecutorService asyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(20);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(100);
executor.initialize();

//return executor.getThreadPoolExecutor(); //I could as well use this. Which is better??
return Executors.newFixedThreadPool(20, executor);
}

我读到上面的内容如下:主池可以向网络服务器发送 20 个并行请求(从而并行地立即为 4 个用户提供服务)。如果所有 20 个线程都忙并且第 5 个用户进来,则请求排队。

问题:

  • 配置正确吗?

  • 为什么我必须在 Executors.newFixedThreadPool() 中另外设置 nthreads=20?设置 poolSize 有什么区别?

  • 设置 corePoolSize=20 是否会产生性能开销?我的意思是,那么游泳池将永远不会缩水。但我可能无法将其设置得更低(例如设置为 5),因为只有在队列耗尽时才会创建新线程。对吧?

最佳答案

我认为

executor.setMaxPoolSize(20) 

可用于通过构造函数覆盖初始设置的线程数,在这种情况下似乎是多余的。这同样适用于 setCorePoolSize。它只是为了动态控制。根据游泳池的大小,一般情况下您可以考虑 Little's Law

关于java - 如何为并行 Web 服务请求配置线程池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45036846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com