gpt4 book ai didi

scala - Play的执行上下文与Scala Global

转载 作者:行者123 更新时间:2023-12-03 09:48:48 24 4
gpt4 key购买 nike

执行上下文如何从

import scala.concurrent.ExecutionContext.Implicits.global

与Play的执行上下文不同:
import play.core.Execution.Implicits.{internalContext, defaultContext}

最佳答案

他们有很大的不同。

在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 Actor 可以共享同一线程。
scala.concurrent.ExecutionContext.Implicits.global是在Scala标准库中定义的 ExecutionContext。这是一种特殊的 ForkJoinPool,它使用 blocking方法处理可能阻塞的代码,以便在池中生成新线程。您真的不应该在Play应用程序中使用此功能,因为Play无法对其进行控制。如果您不小心,它还可能产生大量线程并使用大量内存。

我在 this answer中写了更多有关 scala.concurrent.ExecutionContext.Implicits.global的内容。

关于scala - Play的执行上下文与Scala Global,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30805337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com