如何每秒发送N(N> 100)个请求以在java中指定URL? 我正在使用ExecutorService和CountDownLatch。
CountDownLatch latch = new CountDownLatch(DEFAULT_LATCH_COUNT);
for (int i = 0; i < requestNumber; i++) {
executor.submit(RequestFactory.getInstance().createRequester(latch, url));
}
latch.countDown();
但是为每个请求创建新的线程并不是一种好的做法,不是吗? 如果我必须每秒发送500个异步请求,我必须创建500个线程。 这是解决问题的正确方法还是有其他解决方案?
答案 0 :(得分:1)
拥有500个线程是不好的做法,因为它会给线程之间的上下文切换带来不必要的开销,更不用说创建500个线程的初始化开销了。
请记住,并行运行的线程数量受可用处理器数量的限制(即Runtime.getRuntime().availableProcessors()
)。因此,如果您的计算机有8个可用的处理器,那么制作超过8个工作线程是没有意义的。
至于实际执行工作,这是一个cookie切割工人队列场景。在这里,您可以创建等于可用处理器数量的工作线程数,并让每个工作线程执行大量工作,直到完成所有工作(由AtomicInteger
或类似的东西跟踪)