并行还是并行?

从精心编写的Akka并发:

在这里输入图像描述

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

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


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

说明的一点是, Future.apply方法是启动执行的方式,所以如果直到第一个将来的结果是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)
      }
  }
链接地址: http://www.djcxy.com/p/79391.html

上一篇: Parallel versus Concurrent?

下一篇: Multiprocessing : More processes than cpu.count