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

scala – 执行上下文和调度程序 – 最佳实践,有用的配置和文档

发布时间:2020-12-16 08:55:57 所属栏目:安全 来源:网络整理
导读:Scala执行上下文和调度程序 – 列表和比较:为什么? 关于什么/如何/什么是用于在Scala中执行期货的最佳执行上下文以及如何配置调度程序,存在很多问题. 我仍然无法找到具有优缺点和配置示例的更长列表. 我能找到的最好的是Akka文档:http://doc.akka.io/docs
Scala执行上下文和调度程序 – 列表和比较:为什么?

关于什么/如何/什么是用于在Scala中执行期货的最佳执行上下文以及如何配置调度程序,存在很多问题.
我仍然无法找到具有优缺点和配置示例的更长列表.

我能找到的最好的是Akka文档:http://doc.akka.io/docs/akka/snapshot/scala/dispatchers.html和Play文档https://www.playframework.com/documentation/2.5.x/ThreadPools.

我想问一下scala.concurrent.ExecutionContext.Implicits.global和Akka默认的配置,你在日常开发生活中使用它们,当你使用它们时,它们的优点和缺点是什么.

以下是我已经拥有的一些内容:

第一个未完成的概述

标准:scala.concurrent.ExecutionContext.Implicits.global

>不确定时使用
>易于使用
>分享一切
>可能会耗尽所有CPU
>更多信息:http://www.scala-lang.org/api/2.11.5/index.html#scala.concurrent.ExecutionContext

测试 – ExecutionContext.fromExecutor(new ForkJoinPool(1))

>用于测试
>没有并行性

播放默认的EC – play.api.libs.concurrent.Execution.Implicits._

>使用Play时使用而不是scala.concurrent.ExecutionContext.Implicits.global
>播放默认值
>分享
>更多信息:https://www.playframework.com/documentation/2.5.x/ThreadPools

Akka的默认执行上下文

>基于配置
>更多信息:http://doc.akka.io/docs/akka/snapshot/scala/dispatchers.html

舱壁

ExecutionContext.fromExecutor(new ForkJoinPool(n)) based on an separated dispatcher . Thanks to Sergiy Prydatchenko

解决方法

理想情况下,只使用非阻塞代码,您只需使用框架执行上下文.玩框架或Akka的.

但有时您必须使用阻止API.在一个Play Framework和JDBC项目中,我们遵循他们的建议[1]并将执行上下文设置为有100个线程,并且只是在任何地方使用默认值.该系统的使用和需求非常快.

在另一个我们有阻塞和非阻塞代码混合的Akka项目中,我们为不同的功能配置了单独的调度程序.像“阻塞调度程序”,“重要功能调度程序”和“默认调度程序”.这样做很好,但比1个调度员更复杂,我们必须知道/猜测/监控每个需要多少.我们加载测试它,并发现在1个线程它太慢了,如果我们有5个线程它更好但是在10个线程之后它没有得到更快.所以我们把它留在10个线程.最终我们重构了阻塞代码并将所有内容都移到了默认值.

但每个用例都不同,您需要对系统进行分析和监控,以了解适合您的最新情况.如果所有非阻塞代码都很容易,那么每个CPU核心应该是1个线程.

[1] https://www.playframework.com/documentation/2.5.x/ThreadPools#Highly-synchronous

(编辑:李大同)

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

    推荐文章
      热点阅读