Scala “Akka Streams”中“extraction”的用例是什么?

Scala “Akka Streams”中“extraction”的用例是什么?,scala,akka,akka-stream,Scala,Akka,Akka Stream,我刚刚试着在akka streams中将合并和外推 由于converate对我来说完全有意义,因此我不了解extraction的用例 为什么我们要为下游增加更多的工作——而上游却不需要 从Scala文档: 允许更快的下游独立于较慢的上游进行 例如: 游戏开发 在视频游戏中,通常至少有两个“循环”:逻辑/游戏循环和渲染循环。通常,游戏循环的速率(“滴答速率”)比渲染循环的速率(“帧速率”)慢。例如,逻辑勾号可能每秒出现10次,但帧速率通常应至少为每秒60帧。为了在两个刻度之间呈现一些东西,游戏开发

我刚刚试着在akka streams中将
合并
外推

由于
converate
对我来说完全有意义,因此我不了解
extraction
的用例

为什么我们要为下游增加更多的工作——而上游却不需要

从Scala文档:

允许更快的下游独立于较慢的上游进行

例如:

游戏开发 在视频游戏中,通常至少有两个“循环”:逻辑/游戏循环和渲染循环。通常,游戏循环的速率(“滴答速率”)比渲染循环的速率(“帧速率”)慢。例如,逻辑勾号可能每秒出现10次,但帧速率通常应至少为每秒60帧。为了在两个刻度之间呈现一些东西,游戏开发人员可以使用这两种方法。正如您可能已经猜到的,外推函数非常适合外推。下面是一个滴答声速率为每秒10滴答声且无帧速率限制的示例:

Source.tick(0.millis, 100.millis, 0)
    .scan(intialGameState) { (g, _) => tick(g) }
    .extrapolate(extrapolateFn)
    .runForeach(render)
现在
extractionEFN
只需返回一个迭代器,该迭代器根据需要提供外推游戏状态:

def extrapolateFn(g: GameState) = Iterator.continually {
  // Compute how long it has been since `g` was created
  // Advance the state by that amount of time
  // Return the new state
}