Scala 将并行集合与Akka混合

Scala 将并行集合与Akka混合,scala,parallel-processing,akka,scala-collections,Scala,Parallel Processing,Akka,Scala Collections,scala并行收集操作与Akka Actors(和Futures)在系统上高效调度方面使用的并发/并行性有多好 参与者和未来的执行由ExecutionContext处理,通常由调度程序提供。我在并行集合中发现的结果表明它们使用了TaskSupport对象。我发现了一个ExecutionContextTaskSupport对象,该对象可能连接这两个对象,但不确定 混合使用这两种并发解决方案的正确方法是什么?或者建议不要这样做?目前,这一点没有得到很好的支持/处理 在Scala 2.11-M7之前,

scala并行收集操作与Akka Actors(和Futures)在系统上高效调度方面使用的并发/并行性有多好

参与者和未来的执行由
ExecutionContext
处理,通常由
调度程序提供。我在并行集合中发现的结果表明它们使用了
TaskSupport
对象。我发现了一个
ExecutionContextTaskSupport
对象,该对象可能连接这两个对象,但不确定


混合使用这两种并发解决方案的正确方法是什么?或者建议不要这样做?

目前,这一点没有得到很好的支持/处理

在Scala 2.11-M7之前,尝试将调度程序用作ContextExecutor会引发异常

也就是说,参与者接收中的以下代码将抛出一个
NotImplementedError

val par = List(1,2,3).par
par.tasksupport = new ExecutionContextTaskSupport(context.dispatcher)

par foreach println
顺便说一句,这在2.11-M7中已被修复,但并不是为了纠正上述问题。
在阅读有关修复程序的注释时,听起来像是在上述情况下由
ExecutionContextTaskSupport
提供的实现可能比直接使用其他TaskSupport实现有一些开销;然而,我没有做任何事情来测试这种解释或评估任何影响的大小


关于平行收集的一点说明:
默认情况下,并行集合将使用全局ExecutionContext(
ExecutionContext.Implicits.global
),就像您可能用于未来一样。虽然这是一种良好的行为,但如果您希望受调度程序的约束(使用
context.dispatcher
)-正如您可能在Akka中使用期货一样,您需要设置不同的
TaskSupport
,如上面的代码示例所示