【问题标题】:How sync and async request processing differs in Tomcat?Tomcat 中的同步和异步请求处理有何不同?
【发布时间】:2015-01-29 16:02:41
【问题描述】:

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

【问题讨论】:

    标签: java tomcat asynchronous sync nio


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。但是 SOAP 调用的异步模式用例是什么?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      相关资源
      最近更新 更多