Play的执行上下文vs scala全局
如何执行上下文
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.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的文章。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |