将并行集合与Akka混合

vos*_*d01 9 parallel-processing scala akka scala-collections

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

演员和期货的执行是由ExecutionContext一般提供的Dispatcher.我在并行集合上发现它表明它们使用了一个TaskSupport对象.我找到了一个ExecutionContextTaskSupport可能连接这两个但不确定的物体.

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

vos*_*d01 4

目前这还没有得到很好的支持/处理。

\n\n

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

\n\n

也就是说,演员接收中的以下代码将抛出NotImplementedError

\n\n
val par = List(1,2,3).par\npar.tasksupport = new ExecutionContextTaskSupport(context.dispatcher)\n\npar foreach println\n
Run Code Online (Sandbox Code Playgroud)\n\n

顺便说一句,这个问题已在 2.11-M7 中修复,但并未纠正上述问题。
\n在阅读有关修复程序的注释时,听起来像是由ExecutionContextTaskSupport上述情况中提供的实现可能比直接使用其他 TaskSupport 实现之一有一些开销;然而,我没有采取任何措施来检验这种解释或评估任何影响的程度。

\n\n
\n\n

关于并行集合的注意事项:
\n默认情况下,并行集合将使用全局 ExecutorContext ( ExecutionContext.Implicits.global),就像您可能使用 Future 一样。虽然这表现良好,但如果您想受到调度程序的约束(使用context.dispatcher)\xe2\x80\x94 就像您可能对 Akka\xe2\x80\x94 中的 Futures 所做的那样,您需要设置不同的TaskSupport如代码示例中所示多于。

\n