- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能解释一下 map 和 mapAsync w.r.t AKKA 流之间的区别? In the documentation据说
Stream transformations and side effects involving external non-stream based services can be performed with mapAsync or mapAsyncUnordered
最佳答案
签名
signatures 中最能突出显示差异。 : Flow.map
接受一个返回类型 T
的函数而Flow.mapAsync
接受一个返回类型 Future[T]
的函数.
实例
举个例子,假设我们有一个函数可以根据用户 id 在数据库中查询用户的全名:
type UserID = String
type FullName = String
val databaseLookup : UserID => FullName = ??? //implementation unimportant
Source
的
UserID
我们可以使用的值
Flow.map
在流中查询数据库并将全名打印到控制台:
val userIDSource : Source[UserID, _] = ???
val stream =
userIDSource.via(Flow[UserID].map(databaseLookup))
.to(Sink.foreach[FullName](println))
.run()
Future
的并发查询来提高性能。 :
def concurrentDBLookup(userID : UserID) : Future[FullName] =
Future { databaseLookup(userID) }
val concurrentStream =
userIDSource.via(Flow[UserID].map(concurrentDBLookup))
.to(Sink.foreach[Future[FullName]](_ foreach println))
.run()
foreach println
,与数据库查询相比,速度相对较快。流将不断地将需求传播到源并在
Flow.map
内产生更多 future 。 .因此,
databaseLookup
的数量没有限制。同时运行。不受约束的并行查询最终可能会使数据库过载。
Flow.mapAsync
救援;我们可以同时访问并发数据库,同时限制同时查找的数量:
val maxLookupCount = 10
val maxLookupConcurrentStream =
userIDSource.via(Flow[UserID].mapAsync(maxLookupCount)(concurrentDBLookup))
.to(Sink.foreach[FullName](println))
.run()
Sink.foreach
变得更简单了,它不再需要
Future[FullName]
但只是一个
FullName
反而。
Flow.mapAsyncUnordered
.例如:您只需将所有名称打印到控制台,但不关心它们的打印顺序。
关于scala - map 和 mapAsync 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35146418/
谁能解释一下 map 和 mapAsync w.r.t AKKA 流之间的区别? In the documentation据说 Stream transformations and side effe
我的流有一个 Flow,其输出是 List[Any] 对象。我想要一个 mapAsync,然后是其他一些阶段,每个阶段都处理一个单独的元素而不是列表。我怎样才能做到这一点? 实际上我想连接输出 Flo
我有点困惑如何使用 MergeHub。 我正在设计一个使用 Flow.mapAsync() 的流程图,其中给定函数创建另一个流程图,然后使用 Sink.ignore() 运行它>,并返回该 Compl
我刚刚开始使用 Akka Stream,我想弄清楚一些事情: 目前,在我的流程中,我使用 mapAsync() 与我的休息服务集成,如建议 here . 我一直在想,mapAsync() 应该使用什么
我构建了一个定义简单流程的 akka 图 DSL。但是流 f4 需要 3 秒来发送一个元素,而 f2 需要 10 秒。 结果,我得到了:3, 2, 3, 2。但是,这不是我想要的。由于 f2 花费太多
我使用 mapAync(1) 的代码无法按我希望的方式运行。但是当我使用 Await.result 将 mapAsync(1) 更改为 map 时,它起作用了。所以我有一个问题。以下(A) 使用 ma
我是一名优秀的程序员,十分优秀!