servlet和异步CompletableFuture操作的合作?

igr*_*igr 6 java performance multithreading asynchronous java-8

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

换句话说,在sudo图中:

request -> servlet -> module.asyncFoo().thenAsyncBar();
Run Code Online (Sandbox Code Playgroud)

由于这是一个API,请求必须返回(json)响应.

让我困扰的是我们有两个线程池 - 或线程管理器:

  • servlet容器(在我们的例子中是jetty)管理请求
  • 模块,管理异步调用.

目前,我们没有以异步方式使用模块,因为我们get()在请求处理程序(即servlet)中调用future 来准备响应.

是否有可能'重用'现有的容器线程池执行器,所以我们可以继续在同一个线程管理器中执行模块?我们的模块允许我们设置Executor而不是ForkJoinPool.

换句话说:是否有适合java8 的高性能 Java HTTP服务器?它不必是servlet容器,因为我只需要它处理请求.

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