异步Servlet为什么能提高并发?

异步Servlet为什么能提高并发?有点不明白异步化之后虽然tomcat中的tomcat connector接收线程少了,但业务线程还是一样的呀,那为什么不直接调大tomcat的线程数

因为有些代码调用会造成线程阻塞。比如说,调用一个远程的api,那么当你请求发出,等待对方返回数据的时候,你的服务器(如果是同步的话)就无事可做了。
此时如果有新的请求,只能排队等着,而当前的程序也不能往下执行。
而异步就可以解决这个问题,一个请求阻塞的时候,服务器可以同时处理别的请求。
为什么不直接调大tomcat的线程数,因为同步的请求,Servlet的非静态成员和方法都需要同步的,你的线程再多,也不能并发,只能等着。

   首先你得理解什么是 高并发,其实用白话说,高并发就是 在某一时间段里有大量的用户访问你的网站,从而产生大量的流量,因为你要相应数据嘛。

那么如果 用户访问量 很大,你的服务器就需要处理大量的请求,而每一个请求都是需要用一个线程去处理的,也就是Tomcat需要提供一个线程去处理
你的请求(Tomcat有内置的线程池)。
    那为什么说Servlet 异步能提高并发量呢? 也就是说为什么Servlet异步时为什么能提高对用户请求的处理响应时间?
         这时候你需要了解 异步的概念:在Java中异步用白话文讲就是指的同时干多件事(如人一心两用),其实也就是多线程的概念。
        那用Servlet来解释就是,在Servlet 3.0 后版本默认异步,也就是说在Servlet 3.0 之前版本,如果同一时间有两个用户同时向你
        的Servlet发送同一个请求时,Servlet 只能先处理一个,另一个就得等着前一个先处理完之后它才能得到处理,用通俗的话讲就是排队(不过具体谁先谁后就看它们谁先抢到CPU资源了)。

        那在Servlet 3.0之后呢,Servlet变成 “异步”的了,也就是这时候如果还是同事有两个请求过来,Servlet能同时处理了,通俗的将就是变成两个人处理了,之前只有一个人处理,自然需要排队,这里的“人”就是 “线程”。也就是在Servlet 3.0之前是单线程的,到了Servlet 3.0之后进行了优化,内部使用多线程实现异步处理请求。具体的还需你自己查阅文章、源码进行理解。

其中涉及到了异步和阻塞的区别、多线程、IO、NIO(包括BIO、NIO、AIO)等等概念。