gpt4 book ai didi

asynchronous - "crossing asynchronous boundaries"的含义

转载 作者:行者123 更新时间:2023-12-02 09:12:21 29 4
gpt4 key购买 nike

来自 Akka 文档,Pipelining and Parallelism

Akka Streams processing stages (be it simple operators on Flows and Sources or graph junctions) are “fused” together and executed sequentially by default. This avoids the overhead of events crossing asynchronous boundaries but limits the flow to execute at most one stage at any given time.

跨越异步边界的事件的含义是什么?

同样的术语也经常在 A Tale of Two Monix Stream 中使用以及相应的slides

最佳答案

当您具体化流时,ActorMaterializer决定如何运行不同的阶段。默认情况下,所有阶段在幕后同一 Actor 内按顺序运行。这是为了避免每个阶段在不同的 actor 中运行时会发生的线程上下文切换开销。

当您使用async时操作符在舞台上,您告诉物化器您要在该点创建异步边界。这意味着这个舞台将由自己的 Actor 在幕后运行。根据具体情况,这可能会影响性能,因为事件将跨越异步边界。

例如:

Source(List("A","B","C "))
.map(x => x.toLowerCase)
.async
.map(x => x.toUpperCase)
.map(x => x.trim)
.runWith(Sink.ignore)

此流将运行阶段 map(x => x.toLowerCase)与舞台不同的 Actor map(x => x.toUpperCase)map(x => x.trim) 。最后两个将在同一个 actor 内运行。

最后要提到的是,异步边界还允许在流内并行处理事件。每个异步边界都可以独立处理事件,因为它们在不同的参与者中运行(只要下游有需求)。在这个简单的场景中,“B”可以在map(x => x.toLowerCase)处进行处理。与 map(x => x.toUpperCase) 处正在处理的“A”同时进行和map(x => x.trim) .

我希望这有助于更多地了解流的工作原理。

关于asynchronous - "crossing asynchronous boundaries"的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50765478/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com