如何在java中每秒发送N(N > 100)个请求来指定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 个线程。 这是解决问题的正确方法还是还有其他解决方案?
最佳答案
拥有 500 个线程是不好的做法,因为它会在线程之间进行上下文切换带来不必要的开销,更不用说创建 500 个线程的初始化开销了。
请记住,可以并行运行的线程数量受到可用处理器数量的限制(即 Runtime.getRuntime().availableProcessors()
)。因此,如果您的计算机有 8 个可用处理器,则创建超过 8 个工作线程是没有意义的。
至于实际执行工作,这是一个千篇一律的工作队列场景。在这里,您可以创建等于可用处理器数量的工作线程,并让每个工作线程执行大量工作,直到所有工作完成(由 AtomicInteger
或类似的东西跟踪)
关于Java,每秒发送多个get请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44912808/