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

scala – Play的内部执行上下文

发布时间:2020-12-16 09:37:09 所属栏目:安全 来源:网络整理
导读:执行上下文如何执行: import scala.concurrent.ExecutionContext.Implicits.global 与Play的内部执行上下文不同: import play.core.Execution.Implicits.internalContext 解决方法 他们是非常不同的。 在Play 2.3.x和之前,play.core.Execution.Implicits.
执行上下文如何执行:

import scala.concurrent.ExecutionContext.Implicits.global

与Play的内部执行上下文不同:

import play.core.Execution.Implicits.internalContext

解决方法

他们是非常不同的。

在Play 2.3.x和之前,play.core.Execution.Implicits.internalContext是一个ForkJoinPool,具有固定的大小限制,由Play内部使用。您不应该将其用于您的应用程序代码。从文档:

Play Internal Thread Pool – This is used internally by Play. No application code should ever be executed by a thread in this thread pool,and no blocking should ever be done in this thread pool. Its size can be configured by setting internal-threadpool-size in application.conf,and it defaults to the number of available processors.

而是使用play.api.libs.concurrent.Execution.Implicits.defaultContext,它使用ActorSystem。

在2.4.x中,它们都使用相同的ActorSystem。这意味着Akka将在其自己的线程池之间分配工作,但是以不可见的方式(除了配置)。几个Akka演员可以共享相同的线程。

scala.concurrent.ExecutionContext.Implicits.global是在Scala标准库中定义的ExecutionContext。它是一个特殊的ForkJoinPool,它使用阻塞方法来处理潜在的阻塞代码,以便在池中产生新的线程。你真的不应该在Play应用程序中使用,因为Play将无法控制。如果您不小心,它也有潜力产生大量线程并使用大量内存。

我在this answer写了更多关于scala.concurrent.ExecutionContext.Implicits.global。

(编辑:李大同)

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

    推荐文章
      热点阅读