实例之间 Scala 全局线程拉取的行为

Behavior of the Scala global thread pull between instances

我不清楚 scala.concurrent.ExecutionContext.Implicits.global

的行为

线程是每个进程拉一个全局的 "singleton" 还是它是局部于它的作用域的实例?如果它是作用域的,你怎么能避免过度分配线程?

例如,在高度线程化的环境中,线程池是对所有这些实例都是全局的还是对每个实例都是全局的?

人为的例子

MyClass.scala
import scala.concurrent.ExecutionContext.Implicits.global
class MyClass {
  ...
  ...
  Future {
     for( var x <- Range ){
        Future {new MyClass} // create a new instance recursively asyncly
     }
  }
  ...
  ...
}

它是每个进程的全局单例。

您可以通过查看源代码来验证这一点,并看到它是在顶级对象中定义的对象,所以用更经典的术语来说,"lazy val defined in a singleton".

顺便说一句,您可以在 ExecutionContext 对象的注释中获得有关其属性的更多信息。