首页 网络技术
  1. 正文

服务器中如何使用特定的执行程序来阻止操作

使用特定的执行程序来阻止操作

因为一个缓慢的操作而使整个服务器变得无响应,这通常不是开发人员想要的。不幸的是,对于RPC,响应时间通常是不可预测的。

假设服务器有100个工作线程,有一个端点,称为100 RPS。在内部,它发出一个RPC调用,通常需要10毫秒。在某个时间点,此RPC的响应时间变为2秒,在峰值期间服务器能够做的惟一的一件事就是等待这些调用,而其他端点则无法访问。

@GET@Path("/genre/{name}")@Produces(MediaType.APPLICATION_JSON)public Response getGenre(@PathParam("name") String genreName) {Genre genre = potentiallyVerySlowSynchronousCall(genreName);return Response.ok(genre).build();}

解决这个问题最简单的方法是提交代码,它将阻塞调用变成一个线程池:

@GET@Path("/genre/{name}")@Produces(MediaType.APPLICATION_JSON)public void getGenre(@PathParam("name") String genreName, @Suspended AsyncResponse response) {response.setTimeout(1L, TimeUnit.SECONDS);executorService.submit(() -> {Genre genre = potentiallyVerySlowSynchronousCall(genreName);return response.resume(Response.ok(genre).build());});}

本文标题:服务器中如何使用特定的执行程序来阻止操作
本文链接:https://www.qqooo.cn/post/6622.html
版权说明:网站文章均来源于手工整理和网友投稿,若有不妥之处请来信 xsds@vip.qq.com 处理,谢谢!