聊聊异步编程CompletionService的使用()

在日常需求的研发过程中都遇到过需要调用多个服务并将他们的结果进行合并的需求。这种情形又分为多个结果相互不依赖的情况,以及多个调用的结果相互依赖。比如一个首页,需要获取用户信息、首页banner信息、推荐信息、用户资产信息等。其中获取用户信息和获取banner信息、推荐信息是相互独立的没有依赖关系,而获取用户信息和用户资产以及资产详情信息是相互依赖的,需要先获取到用户的信息,然后获取用户资产依赖于用户信息,获取资产详情又依赖于用户资产信息。

对于上面的问题,最简单普遍的处理方案为:获取用户信息–>获取用户资产–>获取资产详情–>获取首页推荐–>获取首页banner。将这些过程进行顺序调用获取到结果之后返回。但是获取用户信息和获取首页其它信息直接并没有关联关系,顺序调用的话线程一个一个顺序执行,虽然不相关但是却必须等到前面的方法执行完毕之后才能执行后面的方法。这种方式导致调用耗时就是所有调用的总和。还有一种方式就是不相关的任务并发执行,这样A线程在查询用户信息的时候B线程也不闲着去查询首页banner信息,C线程去查询推荐信息。这样就相当于多人工作,耗时也就少了,尤其对于首页这种对于用户体验影响特别大的耗时尤为重要。

可以利用异步编程工具CompletableFuture、CompleteService实现需求,利用现有的工具可以简单的就实现功能。

CompletableFuture、CompleteService都是异步编程工具。但是它们的使用场景有所不同。CompletableFuture适用于有相互依赖关系的多个任务之间的编排,而CompleteService适用于多个任务之间没有相互依赖关系的情景。

————————

在日常需求的研发过程中都遇到过需要调用多个服务并将他们的结果进行合并的需求。这种情形又分为多个结果相互不依赖的情况,以及多个调用的结果相互依赖。比如一个首页,需要获取用户信息、首页banner信息、推荐信息、用户资产信息等。其中获取用户信息和获取banner信息、推荐信息是相互独立的没有依赖关系,而获取用户信息和用户资产以及资产详情信息是相互依赖的,需要先获取到用户的信息,然后获取用户资产依赖于用户信息,获取资产详情又依赖于用户资产信息。

对于上面的问题,最简单普遍的处理方案为:获取用户信息–>获取用户资产–>获取资产详情–>获取首页推荐–>获取首页banner。将这些过程进行顺序调用获取到结果之后返回。但是获取用户信息和获取首页其它信息直接并没有关联关系,顺序调用的话线程一个一个顺序执行,虽然不相关但是却必须等到前面的方法执行完毕之后才能执行后面的方法。这种方式导致调用耗时就是所有调用的总和。还有一种方式就是不相关的任务并发执行,这样A线程在查询用户信息的时候B线程也不闲着去查询首页banner信息,C线程去查询推荐信息。这样就相当于多人工作,耗时也就少了,尤其对于首页这种对于用户体验影响特别大的耗时尤为重要。

可以利用异步编程工具CompletableFuture、CompleteService实现需求,利用现有的工具可以简单的就实现功能。

CompletableFuture、CompleteService都是异步编程工具。但是它们的使用场景有所不同。CompletableFuture适用于有相互依赖关系的多个任务之间的编排,而CompleteService适用于多个任务之间没有相互依赖关系的情景。