当前位置: 首页 > 知识库问答 >
问题:

并行通量与项目反应器中的通量

郭兴平
2023-03-14

因此,我从文档中了解到,并行通量本质上是将通量元素划分为单独的轨道。(本质上类似于分组)。就线程而言,这将是调度程序的工作。让我们考虑一下这样的情况。所有这些都将在通过runOn()方法提供的同一个调度程序实例上运行。让我们考虑如下情况:

Mono<Response> = webClientCallAPi(..) //function returning Mono from webclient call

现在让我们打大约100个电话

Flux.range(0,100).subscribeOn(Schedulers.boundedElastic()).flatMap(i -> webClientCallApi(i)).collecttoList() // or subscribe somehow

如果我们使用parailFlux:

Flux.range(0,100).parallel().runOn(Schedulers.boundedElastic()).flatMap(i -> webClientCallApi(i)).sequential().collecttoList();

因此,如果我的理解是正确的,那么它似乎非常相似。那么,平行磁通相对于磁通的优势是什么?什么时候应该使用平行磁通相对于磁通?

共有1个答案

狄阳秋
2023-03-14

实际上,您可能很少需要使用平行通量,包括在本例中。

在您的示例中,您正在触发100个Web服务调用。请记住,执行此操作所需的实际工作非常少——您生成并触发一个异步请求,然后一段时间后您会收到回复。在该请求之间

如果你把这个流量分开并并行运行,你是说你想把这些少量的CPU资源分开,这样它们就可以在不同的CPU核上同时运行。这绝对没有意义——分解流量、并行运行流量,然后稍后将其合并的开销将远远大于让它在正常的顺序调度程序上执行。

另一方面,假设我有一个Flux

(另外,作为结束语,您几乎总是希望使用具有并行流量的调度程序。parallel(),而不是调度程序。BoundedElistic())

 类似资料:
  • 我正在使用project reactor,我有下一个问题: 我有一个返回的方法,它包含一个CustomerDto列表,每个客户机都有属性,其中一个属性是付款列表。但是这个付款清单是空的。 我有下一个例外: 我想知道是否有一种非阻塞或最佳的方法来做这件事

  • 我是项目Reactor或反应式编程的新手,所以我可能做错了什么。我正在努力构建一个执行以下操作的流程: 给定类实体: 从DB读取实体(

  • 我一直在使用Spring Boot 2.0.1及其Webflux库开发一个示例reactive web api。我一直在看网上的例子,试图建立它,但我被两件事难倒了。下面是我的两个问题。 1)如何返回响应实体流,当我尝试时,我得到一个错误,说只能返回单个响应实体。下面是我当前的代码。 2)当我更新一个对象时,我使用一个flatMap来更新保存在Mongo中的对象,然后使用一个Map来将其转换为响应

  • 根据文档: 或者在某些特定情况下,当只需要使用Mono而Flux无法处理操作时?请建议。

  • 我有一个LegacyAcCountDto,我需要从两个不同的来源建立一个列表。一个是本地JPA存储库,另一个是Web服务调用。Web服务版本具有JPA数据源不可用的帐户状态。我需要并行执行两个调用,当它们都完成时,我需要找到Web服务列表的legacyId,并用从Web服务中提取的帐户状态填充列表。整个想法是返回一个包含完整DTO的列表。我不需要把它保存回网络服务或JPA回购 DTO: merge