“跨越异步边界”的含义

时间:2018-06-08 17:09:03

标签: asynchronous akka streaming

来自Akka文档,Pipelining and Parallelism

  

Akka Streams处理阶段(无论是简单的Flows和   源或图结)被“融合”在一起并执行   默认顺序。这避免了事件交叉的开销   异步边界但限制流程最多执行一次   在任何特定的时间阶段。

跨越异步边界的事件是什么意思?

同一术语也经常用于A Tale of Two Monix Stream和相应的slides

1 个答案:

答案 0 :(得分:3)

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

在舞台上使用async运算符时,您告诉构造函数您要在该点创建异步边界。这意味着舞台将在幕后运行。根据情况,这可能会影响性能,因为事件将跨越异步边界。

例如:

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)map(x => x.toUpperCase)阶段不同的角色中运行map(x => x.trim)阶段。最后两个将在同一个演员中运行。

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

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