Java 异步servlet,我们为什么需要它

Java 异步servlet,我们为什么需要它,java,asynchronous,servlets,Java,Asynchronous,Servlets,我将SpringBoot用于带有嵌入式tomcat(8)的MVC项目 我知道下面的问题:当请求到来时,我们从tomcat连接池中给一个线程来继续这个请求,例如,我们调用一些阻塞API,这样我们的线程除了等待之外什么也不做,然后为客户端返回响应。现在我们有了Callable和differencedResult类,它们使用executorservice中的线程,我们将作为Bean提供这些线程(否则它会为每个请求创建新线程) 例如,Tomcat的连接池是100个线程,异步调用的连接池也是100个,当请

我将SpringBoot用于带有嵌入式tomcat(8)的MVC项目

我知道下面的问题:当请求到来时,我们从tomcat连接池中给一个线程来继续这个请求,例如,我们调用一些阻塞API,这样我们的线程除了等待之外什么也不做,然后为客户端返回响应。现在我们有了
Callable和differencedResult
类,它们使用executorservice中的线程,我们将作为
Bean
提供这些线程(否则它会为每个请求创建新线程)


例如,Tomcat的连接池是100个线程,异步调用的连接池也是100个,当请求发出时,它从Tomcat获取线程,然后Tomcat将从executor服务获取对其中一个工作线程的请求,并返回Tomcat线程池。但我不明白,为什么我们需要另一个线程池,为什么我们不能仅仅增加Tomcat线程的数量来获得与使用工作线程池相同的结果

tomcat的线程可以接受新的网络连接,并可能在异步池返回结果之前为其提供服务。因此,为什么我们不能增加tomcat线程的数量,而不是使用异步支持?我们可以,而且通常是这样做的,如果您有不同类型的查询,单独的池很有用,因此,重线程的执行不会影响网络的oneTomcat线程,即使它等待阻塞调用,也会保持与客户端的网络连接,这比释放此线程并使用服务器运行的CPU池中的线程更占用资源。这是使用异步支持的主要原因吗?不,等待阻塞调用不会使用资源,也不会保留客户端的资源(在这两种情况下,您必须保持连接打开)