如果同时发送大量http请求,如何设置ThreadPoolTaskExecutor?
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% 适合我的情况。我想知道在这种情况下如何设置 ThreadPoolTaskExecutor,例如 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
就我而言,我需要向客户端的应用程序发送超过数百万个 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% 适合我的情况。我想知道在这种情况下如何设置 ThreadPoolTaskExecutor,例如 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