首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >异步JAX-RS

异步JAX-RS
EN

Stack Overflow用户
提问于 2018-06-27 13:29:41
回答 1查看 206关注 0票数 0

我的怀疑是关于异步JAX-RS的工作,这对我来说是一种新的东西,我正在努力抓住它的优势。我所理解的是,客户端发送一个请求,该请求从请求者线程委派到工作线程,一旦处理完成,响应就会使用AsyncResponse发送回客户端。我还理解的是,在整个过程中,客户端都在等待来自服务器的响应。(因此,对于客户端而言,它与正常的同步请求相同)

它还指出,当请求线程被发送到工作线程进行进一步处理时,因此通过这种方法,I/O线程可以自由地接受新的连接。

我不理解的是,客户端仍在等待响应,因此客户端和服务器之间仍保持活动连接。这不是在I/O线程中维护的吗?挂起在这里是什么意思?

而且,即使I/O线程由于进程委托给工作线程而被释放,与客户端的连接仍然在运行,那么服务器如何接受越来越多的连接呢?

我的下一个问题是关于这里使用的线程池。I/O线程和工作线程来自不同的池?工作线程/处理器线程是否不是来自服务器管理的池?

由于我不能理解这一点,我的下一个思考是,仅仅为I/O使用单独的池,并且在客户端连接仍在运行的情况下进行处理,这与使用内部处理阻止I/O是相同的,对吧?

我还没有很好地掌握这个概念。

EN

回答 1

Stack Overflow用户

发布于 2018-06-27 14:42:04

此场景中使用的线程池为:

  1. 请求处理池,由JAX-RS容器(例如Jersey)管理,
  2. 工作线程池,通常由您自己的代码管理。

可能有一个IO线程与该连接相关联,但这只是一个实现细节,不会对此产生影响。

当您使用AsyncResponse时,只要您从handle方法返回,请求处理线程(来自池#1)就会被释放,容器可以使用它来处理另一个请求。

关于你的问题:

  1. "...服务器如何接受越来越多的连接?“-与不使用AsyncResponse处理长时间运行的请求相比,它可以接受更多的连接,因为您正在释放有限的资源之一(线程池#1中的线程)。连接本身不会被释放,而且连接也是有限的资源,所以你可能会用完这些资源(以及可能受到CPU或memory).
  2. "are的限制,工作/处理器线程不是来自服务器管理的池?)-通常不会。参见Paul Samsotha here的链接中的示例-应用程序代码本身创建了一个新线程。这可能不是您要做的事情,您很可能希望使用ExecutorService或类似的方法,但重点是您自己管理“工作线程”。这里的例外是,如果你使用泽西的annotation.
  3. Your @ManagedAsync,最后一个问题应该由我对#1的回答来回答-在较低的级别,仍然有一个资源与连接相关联,即使你使用的是AsyncResponse,但AsyncResponse确实释放了容器的请求处理线程,这可能在数量上比最大连接数量更有限。您可以选择通过更改服务器配置而不是使用AsyncResponse来处理此问题,但是AsyncResponse有两个优点-它在应用程序的控制之下,并且它是按请求而不是按服务器进行的。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51055104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档