scala - Akka future - 并行与并发?

标签 scala akka future

来自写得很好的Akka Concurrency :

enter image description here

据我了解,该图指出,numSummercharConcat 将在同一线程上运行。

是否可以并行运行每个Future,即在单独的线程上?

最佳答案

左边的图片是它们并行运行。

插图的要点是 Future.apply 方法是启动执行的方法,因此如果直到第一个 future 的结果为 flatMap 时才发生ed(如右图所示),那么你就得不到并行执行。

(请注意,“启动”是指相关的 ExecutionContext 被告知有关该作业的信息。它如何并行化是一个不同的问题,可能取决于诸如其线程池的大小。)

左侧的等效代码:

val numSummer = Future { ... }  // execution kicked off
val charConcat = Future { ... }  // execution kicked off
numSummer.flatMap { numsum =>
  charConcat.map { string =>
    (numsum, string)
  }
}

右边:

Future { ... }  // execution kicked off
  .flatMap { numsum =>
    Future { ... }  // execution kicked off (Note that this does not happen until
                    // the first future's result (`numsum`) is available.)
      .map { string =>
        (numsum, string)
      }
  }

关于scala - Akka future - 并行与并发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35849001/

相关文章:

eclipse - 如何将 sbteclipse 插件添加到 SBT 0.10.x

c++ - 将返回 std::future<T> 的函数改编为 std::future<U>

python - Scikit-learn KNN(K 最近邻)使用 Apache Spark 并行化

scala - 非文字值的模式匹配

Scala 日期格式

unit-testing - Akka 中的 TestKit、TestActorRef 和 TestProbe 是什么?

java - 可在 JVM Scala 和 Scala.js 中使用的计时器

java - 使用 Java 的 Akka 中的 REST 客户端

flutter - Dart 中的批处理 future

Flutter 基于http响应动态构建卡片