我们有web API,我们基本上使用普通的servlet作为请求处理程序。请求处理程序主要是我们正在使用的某个模块的一个或多个异步方法调用的简单包装器。幸运的是,我们使用的是java8,因此模块异步方法返回promises,即CompletableFuture
。
换句话说,在sudo图中:
request -> servlet -> module.asyncFoo().thenAsyncBar();
由于这是一个API,请求必须返回(json)响应。
让我困扰的是我们有两个线程池 - 或线程管理器:
目前,我们没有以异步方式使用该模块,因为我们在请求处理程序(即servlet)中调用期货get()
来准备响应。
是否有可能'重用'现有的容器线程池执行器,所以我们可以继续在同一个线程管理器中执行模块?我们的模块允许我们设置Executor
而不是ForkJoinPool
。
换句话说:是否有适合java8的性能 java HTTP服务器?它不必是servlet容器,因为我只需要它处理请求。
当然,这一切是否有意义,是否会对表演产生任何影响?我会说是的,因为可用工作线程的数量会增加一倍。