【问题标题】:Java, send multiple get request per secondJava,每秒发送多个获取请求
【发布时间】:2017-07-05 04:04:34
【问题描述】:

如何每秒发送 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 个线程。 这是解决问题的正确方法还是有其他解决方案?

【问题讨论】:

    标签: java multithreading concurrency


    【解决方案1】:

    拥有 500 个线程是不好的做法,因为它会为线程之间的上下文切换带来不必要的开销,更不用说创建 500 个线程的初始化开销了。

    请记住,可以并行运行的线程数量受可用处理器数量的限制(即Runtime.getRuntime().availableProcessors())。因此,如果您的计算机有 8 个可用处理器,则创建超过 8 个工作线程是没有意义的。

    至于实际执行工作,这是一个千篇一律的工作队列场景。在这里,您可以创建与可用处理器数量相等的工作线程数,并让每个工作线程执行工作块,直到所有工作完成(由AtomicInteger 或类似的东西跟踪)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多