Java servlet和异步CompletableFuture操作的合作?

Java servlet和异步CompletableFuture操作的合作?,java,multithreading,performance,asynchronous,java-8,Java,Multithreading,Performance,Asynchronous,Java 8,我们有web API,基本上使用普通servlet作为请求处理程序。请求处理程序主要是我们正在使用的某个模块的一个或多个异步方法调用的简单包装器。幸运的是,我们使用的是java8,因此模块异步方法返回承诺,即CompletableFuture 换句话说,在sudo图中: request -> servlet -> module.asyncFoo().thenAsyncBar(); 由于这是一个API,请求必须返回一个(json)响应 让我烦恼的是,我们有两个线程池或线程管理器:

我们有web API,基本上使用普通servlet作为请求处理程序。请求处理程序主要是我们正在使用的某个模块的一个或多个异步方法调用的简单包装器。幸运的是,我们使用的是java8,因此模块异步方法返回承诺,即
CompletableFuture

换句话说,在sudo图中:

request -> servlet -> module.asyncFoo().thenAsyncBar();
由于这是一个API,请求必须返回一个(json)响应

让我烦恼的是,我们有两个线程池或线程管理器:

  • servlet容器(本例中为jetty)管理请求
  • 模块,管理异步调用
目前,我们没有以异步方式使用模块,因为我们确实在请求处理程序(即servlet)内部调用futures
get()
,以准备响应

是否可以以某种方式“重用”现有容器线程池执行器,以便我们可以在同一线程管理器中继续执行模块?我们的模块允许我们设置
Executor
,而不是
ForkJoinPool

换句话说:是否有一个性能良好的JavaHTTP服务器可以用于java8?它不必是servlet容器,因为我所需要的只是请求处理

当然,所有这些都有意义吗?对表演有什么影响吗?我会说是的,因为可用工作线程的数量将增加一倍。

关于“servlet中的未来调用,不使其完全异步”的说法是对的,顺便提一下,这是一个很好的问题。但是,如果您异步执行servlet应答,服务器仍将等待响应。我认为最佳实践将是web套接字或类似web推送的东西。当响应就绪时,它将被推送。