Что происходит, когда Scala "Future" собирает мусор? - PullRequest
14 голосов
/ 12 июля 2010

Скажем, у меня есть Stream, который довольно дорог для вычисления.Я могу легко создать поток, который «вычисляет вперед», просто написав что-то вроде

import scala.actors.Futures._
val s = future { stream.size }

Если я затем выброшу ссылку на этот Future, будет ли этот поток уничтожен сборщиком мусора?

1 Ответ

15 голосов
/ 12 июля 2010

Нет.Поток принадлежит планировщику.В любом случае, у планировщика есть ссылка на незавершенное тело Future (это происходит в a.start()), поэтому он не будет собирать мусор до завершения.

object Futures {

  /** Arranges for the asynchronous execution of `body`,
   *  returning a future representing the result.
   *
   *  @param  body the computation to be carried out asynchronously
   *  @return      the future representing the result of the
   *               computation
   */
  def future[T](body: => T): Future[T] = {
    val c = new Channel[T](Actor.self(DaemonScheduler))
    val a = new FutureActor[T](_.set(body), c)
    a.start()
    a
  }
}
...