我正在开发一个需要连续测试 1000 台代理服务器的应用程序。该应用程序基于 Spring Boot。
我正在使用的当前方法是@Async装饰方法,它采用代理服务器并返回结果。
我经常遇到 OutOfMemory 错误,处理速度很慢。我认为这是因为每个异步方法都在一个单独的线程中执行,该线程阻塞了 I/O?
在我读到关于 Java 中异步的任何地方,人们都将线程中的并行执行与非阻塞 IO 混合在一起。在 Python 世界中,有一个异步库在单个线程中执行 I/O 请求。当一个方法正在等待服务器的响应时,它开始执行其他方法。
我认为就我而言,我需要这样的东西,因为 Spring 的 @Async 不适合我。有人可以帮助消除我的困惑并建议我应该如何应对这个挑战吗?
我想同时检查 100 个代理而不会造成过多的负载。我已阅读有关 Apache Async HTTP Client 但我不知道它是否合适?
这是我正在使用的线程池配置:
public Executor proxyTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(Runtime.getRuntime().availableProcessors() * 2 - 1);
executor.setMaxPoolSize(100);
executor.setDaemon(true);
return executor;
}
繁华开满天机
相关分类