【发布时间】:2020-07-02 21:48:17
【问题描述】:
我有一个第三方 API,我使用 HTTP GET 请求调用它。每个请求都需要几秒钟才能得到响应。
目前我正在使用一个 CompletableFuture,它在大小为 64 的 FixedThreadPool 上执行。这会导致线程被阻塞,直到它收到对 GET 请求的响应,即线程在发送 GET 响应后处于空闲状态,直到它们收到回复。因此,我可以发送的最大同时请求数受到线程大小的限制,即此处为 64。
我可以使用什么来代替 CompletableFuture,这样我的线程就不会闲置等待响应?
【问题讨论】:
-
所以增加线程池,或者无限使用。但是你真的有 64 个待处理的 GET 请求同时待处理吗?
-
我实际上可以同时处理数千个 GET 请求。除了使用这种大小的线程池之外,还有其他方法吗?线程只需发送 GET 请求并收集响应。
-
几千个空闲线程没什么问题,非阻塞HTTP严重难以实现。
-
拥有多个线程的问题是我们可能需要在扩展时保持线程池的大小不断变化。而且我们可以在 Java VM 上拥有的线程大小也不是那么大(根据这个答案是 6500)。 stackoverflow.com/questions/763579/…
-
所以设置得更低。无论如何,您实际上不能同时执行数千个 GET 请求。网络不是多线程的。但是你引用的问题是八岁的问题。你需要做一些实验。