Tomcat中的同步和异步请求处理有何不同?

时间:2015-01-29 16:02:42

标签: java tomcat asynchronous sync nio

我无法弄清楚Tomcat中同步和异步调用之间的区别。 我到处都使用NIO。我有几千个Tomcat线程管理的连接。当长同步请求收入时,线程从Tomcat线程池借用并处理该请求。此线程等待完成长进程,然后将结果写入HTTPResponse。所以资源浪费只是为了等待。当长异步请求收入时,Tomcat线程创建单独的线程,并且在此新线程内启动长进程,并且Tomcat线程立即返回到池alomost。 我明白了吗?如果是这样,我没有看到同步和异步模式之间有任何区别,因为在两种模式下都使用了相同数量的线程

2 个答案:

答案 0 :(得分:2)

区别在于"拉"与"推"。是的,你是对的,无论哪种方式都必须分配线程来完成工作。

但是对于同步请求,您必须手动创建工作线程并从客户端轮询任务结果,而使用异步服务器将在任务完成时将结果推送到客户端。

后者效率稍高,因为您的服务器不必为每个结果处理多个轮询请求。

答案 1 :(得分:0)

谢谢,想通了。同步请求是一个线程借用一个请求并等待并提取必要数据的情况。异步请求是这样一种情况,即只有一个线程与等待数据的请求分开,并将其推送到请求异步上下文,即客户端的输出流。当客户端产生异步请求时,它不会创建任何其他线程,但其异步上下文代表订阅者列表。当数据出现时,一个线程遍历此列表并将数据写入每个异步上下文。结果是 - 同步请求表示每个请求一个线程,异步请求表示一个(或多一个)线程用于许多同时请求