Asynchronous “的含义;“跨越异步边界”;

Asynchronous “的含义;“跨越异步边界”;,asynchronous,akka,streaming,Asynchronous,Akka,Streaming,来自Akka文件 Akka流处理阶段(无论是简单的流操作还是 源或图形连接)被“融合”在一起并执行 默认情况下按顺序。这避免了事件交叉的开销 异步边界,但将流限制为最多执行一个 在任何给定的时间阶段 跨越异步边界的事件的含义是什么 同一术语也经常用于和相应的当您具体化流时,Actormatarializer决定如何运行不同的阶段。默认情况下,所有阶段都在同一个演员的幕后按顺序运行。这是为了避免线程上下文切换开销,如果每个阶段在不同的参与者中运行,则会发生这种开销 在阶段上使用async操作符时,

来自Akka文件

Akka流处理阶段(无论是简单的流操作还是 源或图形连接)被“融合”在一起并执行 默认情况下按顺序。这避免了事件交叉的开销 异步边界,但将流限制为最多执行一个 在任何给定的时间阶段

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


同一术语也经常用于和相应的

当您具体化流时,
Actormatarializer
决定如何运行不同的阶段。默认情况下,所有阶段都在同一个演员的幕后按顺序运行。这是为了避免线程上下文切换开销,如果每个阶段在不同的参与者中运行,则会发生这种开销

在阶段上使用
async
操作符时,您告诉物化器您希望在该点创建异步边界。这意味着舞台将由自己的演员在幕后运行。根据场景的不同,这可能会影响性能,因为事件将跨越异步边界

例如:

Source(List("A","B","C "))
  .map(x => x.toLowerCase)
  .async
  .map(x => x.toUpperCase)
  .map(x => x.trim)
  .runWith(Sink.ignore)
此流将在不同的参与者中运行stage
map(x=>x.toLowerCase)
,而不是stage
map(x=>x.toupercase)
map(x=>x.trim)
。最后两个将运行在同一个演员内部

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


我希望这有助于更多地理解流是如何工作的。

太好了,感谢这个例子,这确实有助于理解这个概念。您能否确认,如果stage2依赖于stage1,我们不应该在两者之间添加异步边界?