采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
这是开启异步配置:
这是我的controller,有一个休眠10秒的操作
下面我在浏览器同时打开两个窗口请求
一个是耗时10秒
另一个耗时18秒
我想请问一下老师,开启异步后是不是两个差不多同时发送的请求都应该是10秒,
我这里的代码有什么问题吗?还是说我对异步请求的理解有问题?我这里为什么controller里同一个方法不能并发访问?
答案是当你需要压榨一个机器的极限时,tomcat的并发线程并不是无限提高的,还是要受到机器性能的限制,如果你想在有限的线程数里支持更多的并发,就可以用这种异步的方式。
我知道了,是我使用同一个浏览器的原因,我使用两个不同的浏览器就不会出现这种问题,就算不使用异步,controller里的方法也可以并发运行。
那为什么还要使用异步了?有人说:”因为会出现的问题就是请求处理线程的短缺!请求处理线程的总数是有限的,如果类似的请求多了,所有的处理线程处于阻塞的状态,那新的请求也就无法处理了,也就影响了服务器的吞吐能力。要更加好地发挥服务器的全部性能,就要使用异步”。
我的新的问题是:tomcat服务器并发线程数默认是150,我们是不是只要把并发线程数调高点,就一样能达到和异步请求一样的效果(毕竟创建异步线程也要耗费资源)?到底什么时候需要使用异步请求?
使用异步处理时,真正处理业务的线程应该不在tomcat所在的机器上,tomcat所在的机器所有的资源都用于开tomcat的线程,真正的业务处理通过消息队列或rpc的方式交由别的机器执行,当机器所有的资源都用于开tomcat的线程时还不能满足并发要求时,可以通过这种方式进一步提高单机的吞吐量。
谢谢.
登录后可查看更多问答,登录/注册
Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全
2.1k 2
1.5k 1
2.6k 16
1.5k 14
5.7k 12