请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

异步调用请求的问题

这是开启异步配置:

https://img1.sycdn.imooc.com/szimg//59b3ad860001a48d15160447.jpg

这是我的controller,有一个休眠10秒的操作

https://img1.sycdn.imooc.com/szimg//59b3ae0a00017fab15580442.jpg
下面我在浏览器同时打开两个窗口请求

一个是耗时10秒

https://img1.sycdn.imooc.com/szimg//59b3af350001231a10540109.jpg

另一个耗时18秒

https://img1.sycdn.imooc.com/szimg//59b3af7d0001b8bd10990131.jpg

我想请问一下老师,开启异步后是不是两个差不多同时发送的请求都应该是10秒,

我这里的代码有什么问题吗?还是说我对异步请求的理解有问题?我这里为什么controller里同一个方法不能并发访问?

正在回答

2回答

JoJo 2017-09-10 04:12:34

答案是当你需要压榨一个机器的极限时,tomcat的并发线程并不是无限提高的,还是要受到机器性能的限制,如果你想在有限的线程数里支持更多的并发,就可以用这种异步的方式。

1 回复 有任何疑惑可以回复我~
提问者 我是外国人 2017-09-09 17:16:16

    我知道了,是我使用同一个浏览器的原因,我使用两个不同的浏览器就不会出现这种问题,就算不使用异步,controller里的方法也可以并发运行。

    那为什么还要使用异步了?有人说:”因为会出现的问题就是请求处理线程的短缺!请求处理线程的总数是有限的,如果类似的请求多了,所有的处理线程处于阻塞的状态,那新的请求也就无法处理了,也就影响了服务器的吞吐能力。要更加好地发挥服务器的全部性能,就要使用异步”。

    我的新的问题是:tomcat服务器并发线程数默认是150,我们是不是只要把并发线程数调高点,就一样能达到和异步请求一样的效果(毕竟创建异步线程也要耗费资源)?到底什么时候需要使用异步请求?

0 回复 有任何疑惑可以回复我~
  • JoJo #1
    答案是当你需要压榨一个机器的极限时,tomcat的并发线程并不是无限提高的,还是要受到机器性能的限制,如果你想在有限的线程数里支持更多的并发,就可以用这种异步的方式。
    回复 有任何疑惑可以回复我~ 2017-09-10 04:12:45
  • JoJo #2
    使用异步处理时,真正处理业务的线程应该不在tomcat所在的机器上,tomcat所在的机器所有的资源都用于开tomcat的线程,真正的业务处理通过消息队列或rpc的方式交由别的机器执行,当机器所有的资源都用于开tomcat的线程时还不能满足并发要求时,可以通过这种方式进一步提高单机的吞吐量。
    回复 有任何疑惑可以回复我~ 2017-09-10 04:15:21
  • 提问者 我是外国人 回复 JoJo #3
    谢谢.
    回复 有任何疑惑可以回复我~ 2017-09-10 11:38:40
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信