异步调用请求的问题

来源:3-10 使用多线程提高REST服务性能

我是外国人

2017-09-09

这是开启异步配置:

http://szimg.mukewang.com/59b3ad860001a48d15160447.jpg

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

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

一个是耗时10秒

http://szimg.mukewang.com/59b3af350001231a10540109.jpg

另一个耗时18秒

http://szimg.mukewang.com/59b3af7d0001b8bd10990131.jpg

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

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

写回答

2回答

JoJo

2017-09-10

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

1
0

我是外国人

提问者

2017-09-09

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

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

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

0
3
我是外国人
回复
JoJo
谢谢.
2017-09-10
共3条回复

Spring Security技术栈开发企业级认证与授权

Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全

2662 学习 · 1561 问题

查看课程