如果同时发送大量http请求,如何设置ThreadPoolTask​​Executor?

How to set ThreadPoolTaskExecutor if sending numerous http requests at same time?

就我而言,我需要向客户端的应用程序发送超过数百万个 http 请求以获取弹出通知。像下面的 sudo 代码

int numOfHttpReq = 1000000;
for (int i = 0; i < numOfHttpReq; i++) {
  call async method with ThreadPoolTaskExecutor ...
}

我参考了这篇website的文章,得到了一个公式

Number of threads = Number of Available Cores * (1 + Wait time / Service time)

但是,我认为它不是 100% 适合我的情况。我想知道在这种情况下如何设置 ThreadPoolTask​​Executor,例如 CorePoolSize、MaxPoolSize、QueueCapacity 等...

您只需使用 ThreadPoolExecutor 提供的构造函数就可以很好地做到这一点。

public ThreadPoolExecutor(int corePoolSize,
        int maximumPoolSize,
        long keepAliveTime,
        TimeUnit unit,
        BlockingQueue<Runnable> workQueue) {
            this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
                    Executors.defaultThreadFactory(), defaultHandler);
        }

并且您可以使用工作线程来调用 HttpRequest。

为什么不看一下用于此类性能相关测试的“Gatling”工具。你不用担心对象池和其他东西只是喂养然后你的 use-case 在一段时间内喜欢多少并发请求/并发用户/......还有其他选项。 Gatling