加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 将并行集合与Akka混合

发布时间:2020-12-16 08:57:21 所属栏目:安全 来源:网络整理
导读:scala并行收集操作的效果与Akka Actors(和Futures)在系统上的有效调度方面使用的并发/并行性相符吗? Actors’和Futures’的执行由Dispatcher通常提供的ExecutionContext处理.我在并行集合上发现它表明它们使用TaskSupport对象.我找到了一个ExecutionContext
scala并行收集操作的效果与Akka Actors(和Futures)在系统上的有效调度方面使用的并发/并行性相符吗?

Actors’和Futures’的执行由Dispatcher通常提供的ExecutionContext处理.我在并行集合上发现它表明它们使用TaskSupport对象.我找到了一个ExecutionContextTaskSupport对象,可以连接这两个但不确定.

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

解决方法

目前这不受支持/处理.

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

也就是说,actor的receive中的以下代码将抛出NotImplementedError:

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

par foreach println

顺便提一下,这已经在2.11-M7中修复,但是没有做到纠正上述问题.
在阅读有关修复的注释时,听起来像ExecutionContextTaskSupport在上述情况下提供的实现可能比直接使用其他TaskSupport实现有一些开销;但是,我没有采取任何措施来测试这种解释或评估任何影响的程度.

关于并行集合的注意事项:默认情况下,Parallel Collections将使用全局ExecutorContext(ExecutionContext.Implicits.global),就像您可能用于Futures一样.虽然这很好,但是如果你想受调度程序的限制(使用context.dispatcher) – 你可能会在Akka中使用Futures – 你需要设置一个不同的TaskSupport,如上面的代码示例所示.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读