服务器端的异步和同步 HTTP 请求,性能比较
2022-09-04 20:34:11
我试图找出异步和同步HTTP请求处理的优缺点。我正在使用Dropwizard和Jersey作为我的框架。测试是比较异步和同步HTTP请求处理,这是我的代码
@Path("/")
public class RootResource {
ExecutorService executor;
public RootResource(int threadPoolSize){
executor = Executors.newFixedThreadPool(threadPoolSize);
}
@GET
@Path("/sync")
public String sayHello() throws InterruptedException {
TimeUnit.SECONDS.sleep(1L);
return "ok";
}
@GET
@Path("/async")
public void sayHelloAsync(@Suspended final AsyncResponse asyncResponse) throws Exception {
executor.submit(() -> {
try {
doSomeBusiness();
asyncResponse.resume("ok");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
private void doSomeBusiness() throws InterruptedException {
TimeUnit.SECONDS.sleep(1L);
}
}
同步 API 将在 Jetty 维护的工作线程中运行,异步 API 将主要在自定义线程池中运行。这是我的Jmeter的结果
我的问题是:这两种方法之间有什么区别,我应该在哪种情况下使用哪种模式?
相关主题:同步 HTTP 处理程序和异步 HTTP 处理程序之间的性能差异
更新
我按照建议运行测试,延迟了 10 次
- 同步 500 服务器线程
- 异步 500 工作线程